分页: 1 / 1

请教:tail 提取文本文件的内容,用sed替换时出错?

发表于 : 2016-06-12 11:45
TeliuTe
用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';' {} \; 

Re: 请教:tail 提取文本文件的内容,用sed替换时出错?

发表于 : 2016-06-12 12:45
cao627

代码: 全选

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命令可见

Re: 请教:tail 提取文本文件的内容,用sed替换时出错?

发表于 : 2016-06-13 17:56
TeliuTe
多谢解答,
貌似用tail还不行,for有点太啰嗦,我再试试看

Re: 请教:tail 提取文本文件的内容,用sed替换时出错?

发表于 : 2016-06-13 22:48
astolia
如果能保证@@独占一行的话

代码: 全选

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

Re: 请教:tail 提取文本文件的内容,用sed替换时出错?

发表于 : 2016-06-14 13:02
TeliuTe
@@ 要替换成网页标题,段落标题和正文内容,前面两个不能单独一行
--
暂存一下,

代码: 全选

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 指定留下空格分割的第二段

Re: 请教:tail 提取文本文件的内容,用sed替换时出错?

发表于 : 2016-06-14 17:00
astolia
TeliuTe 写了:@@ 要替换成网页标题,段落标题和正文内容,前面两个不能单独一行
我指的是@@这两个字符需要独占一行,sed脚本里就可以直接用d命令删除整行了。而不是替换后的内容