sh/bash/dash/ksh/zsh等Shell脚本
-
TeliuTe
- 论坛版主
- 帖子: 7668
- 注册时间: 2007-11-25 13:29
- 系统: 16/18/20/w7
- 来自: 新疆博乐
-
联系:
#1
帖子
由 TeliuTe » 2016-06-12 11:45
用for读出来的替换另一个html文件里的@@没问题,(参看附件样例)
用tail提取的就提示 sed: -e 表达式 #1, 字符 56: 未终止的“s”命令,用leafpad查看提取的内容,结尾多了一空行
for 的可以正常通过
代码: 全选
#!/bin/bash
#8.txt里有5行数据,第1行不要
i=1
for yyyy in `cat 8.txt`;do
if ((i !=1));then
b=$b"$yyyy";
fi
((i=i+1))
done
find -name 'lesson.html' -exec sed -i 's;@@;'$b';' {} \;
tail 出错的
代码: 全选
#!/bin/bash
line=`sed -n '$=' 8.txt`
((line=line-1))
b=`cat 8.txt | tail -n $line`
find -name 'lesson.html' -exec sed -i 's;@@;'$b';' {} \;
-
附件
-
- test.7z
- 样例文件:把8.txt里的后面4行插入到lesson.html的@@位置处
- (613 Bytes) 已下载 162 次
-
cao627
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
#2
帖子
由 cao627 » 2016-06-12 12:45
代码: 全选
czj@debian:~/Downloads$ d="1.打开主文件夹,点右键新建文件夹。 2.打开8-3,最上面找书签菜单。 3.左侧栏找绿色表格,打开。 4.保存是绿色的,存到8-3里。"
czj@debian:~/Downloads$ echo $d
1.打开主文件夹,点右键新建文件夹。 2.打开8-3,最上面找书签菜单。 3.左侧栏找绿色表格,打开。 4.保存是绿色的,存到8-3里。
czj@debian:~/Downloads$ echo "$d"
1.打开主文件夹,点右键新建文件夹。 2.打开8-3,最上面找书签菜单。 3.左侧栏找绿色表格,打开。 4.保存是绿色的,存到8-3里。
czj@debian:~/Downloads$ c="1.打开主文件夹,点右键新建文件夹。
> 2.打开8-3,最上面找书签菜单。
> 3.左侧栏找绿色表格,打开。
> 4.保存是绿色的,存到8-3里。
> "
czj@debian:~/Downloads$ echo $c
1.打开主文件夹,点右键新建文件夹。 2.打开8-3,最上面找书签菜单。 3.左侧栏找绿色表格,打开。 4.保存是绿色的,存到8-3里。
czj@debian:~/Downloads$ echo "$c"
1.打开主文件夹,点右键新建文件夹。
2.打开8-3,最上面找书签菜单。
3.左侧栏找绿色表格,打开。
4.保存是绿色的,存到8-3里。
如上,d和c变量用echo $d 和 echo $c命令显示是一样的。但echo "$d" 和 echo "$c" 显示不一样。
即你的 b=`cat 8.txt | tail -n 4` 命令给b赋值的结果相当与如上变量c的值,其中包含不可见换行符号。
sed 's;@@;'$b';' lesson.html 命令执行时
变量$b中的不可见换行符,你不可见,但sed命令可见
-
TeliuTe
- 论坛版主
- 帖子: 7668
- 注册时间: 2007-11-25 13:29
- 系统: 16/18/20/w7
- 来自: 新疆博乐
-
联系:
#3
帖子
由 TeliuTe » 2016-06-13 17:56
多谢解答,
貌似用tail还不行,for有点太啰嗦,我再试试看
-
astolia
- 论坛版主
- 帖子: 6435
- 注册时间: 2008-09-18 13:11
#4
帖子
由 astolia » 2016-06-13 22:48
如果能保证@@独占一行的话
代码: 全选
sed '1d' 8.txt > /tmp/tmpfile
sed -i -e '/@@/{r /tmp/tmpfile' -e 'd}' lesson.html
或者干脆用perl,最简单
代码: 全选
perl -i -pe 's/@@/`sed '1d' 8.txt`/ge' lesson.html
-
TeliuTe
- 论坛版主
- 帖子: 7668
- 注册时间: 2007-11-25 13:29
- 系统: 16/18/20/w7
- 来自: 新疆博乐
-
联系:
#5
帖子
由 TeliuTe » 2016-06-14 13:02
@@ 要替换成网页标题,段落标题和正文内容,前面两个不能单独一行
--
暂存一下,
代码: 全选
rpl -Rde '\r\n' '<br />\r\n' ./*.txt
所有的文本文件的换行加上html换行符
sed -i -e '/@bb/{r 8__.txt' -e 'd}' lesson.html
把整个文本文件插入到模板中,@bb独占一行
b=`echo $a |cut -d ' ' -f 2`
按空格分割,取空格后面的字符串,比如“第一课 学会Ubuntu”,取出后面的“学会Ubuntu”加到标题里,在添加<br/>之前,先取出来
前面的一对``表示括起来的是一句命令,cut 分割,-d 按指定字符,单引号里有个空格,f 2 指定留下空格分割的第二段
-
astolia
- 论坛版主
- 帖子: 6435
- 注册时间: 2008-09-18 13:11
#6
帖子
由 astolia » 2016-06-14 17:00
TeliuTe 写了:@@ 要替换成网页标题,段落标题和正文内容,前面两个不能单独一行
我指的是@@这两个字符需要独占一行,sed脚本里就可以直接用d命令删除整行了。而不是替换后的内容