当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请教:tail 提取文本文件的内容,用sed替换时出错?
帖子发表于 : 2016-06-12 11:45 
头像

注册: 2007-11-25 13:29
帖子: 7268
地址: 新疆博乐
系统: 14.04/16.04/Fedroa22
送出感谢: 38
接收感谢: 101
用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';' {} \;


附件:
文件注释: 样例文件:把8.txt里的后面4行插入到lesson.html的@@位置处
test.7z [613 Bytes]
被下载 84 次


_________________
===新手请看===
Ubuntu 安装 | Ubuntu12.04/14.04/16.04 桌面操作指南
··Ubuntu16.04 安装图文教程(超简单)
····有时间就静下心来——折腾:)
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 请教:tail 提取文本文件的内容,用sed替换时出错?
帖子发表于 : 2016-06-12 12:45 

注册: 2007-12-05 10:57
帖子: 1003
地址: 金山
系统: ubuntu14.04
送出感谢: 13
接收感谢: 62
代码:
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命令可见


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 请教:tail 提取文本文件的内容,用sed替换时出错?
帖子发表于 : 2016-06-13 17:56 
头像

注册: 2007-11-25 13:29
帖子: 7268
地址: 新疆博乐
系统: 14.04/16.04/Fedroa22
送出感谢: 38
接收感谢: 101
多谢解答,
貌似用tail还不行,for有点太啰嗦,我再试试看


_________________
===新手请看===
Ubuntu 安装 | Ubuntu12.04/14.04/16.04 桌面操作指南
··Ubuntu16.04 安装图文教程(超简单)
····有时间就静下心来——折腾:)


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 请教:tail 提取文本文件的内容,用sed替换时出错?
帖子发表于 : 2016-06-13 22:48 
头像

注册: 2008-09-18 13:11
帖子: 2781
送出感谢: 1
接收感谢: 453
如果能保证@@独占一行的话
代码:
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


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 请教:tail 提取文本文件的内容,用sed替换时出错?
帖子发表于 : 2016-06-14 13:02 
头像

注册: 2007-11-25 13:29
帖子: 7268
地址: 新疆博乐
系统: 14.04/16.04/Fedroa22
送出感谢: 38
接收感谢: 101
@@ 要替换成网页标题,段落标题和正文内容,前面两个不能单独一行
--
暂存一下,
代码:
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 指定留下空格分割的第二段


_________________
===新手请看===
Ubuntu 安装 | Ubuntu12.04/14.04/16.04 桌面操作指南
··Ubuntu16.04 安装图文教程(超简单)
····有时间就静下心来——折腾:)


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 请教:tail 提取文本文件的内容,用sed替换时出错?
帖子发表于 : 2016-06-14 17:00 
头像

注册: 2008-09-18 13:11
帖子: 2781
送出感谢: 1
接收感谢: 453
TeliuTe 写道:
@@ 要替换成网页标题,段落标题和正文内容,前面两个不能单独一行

我指的是@@这两个字符需要独占一行,sed脚本里就可以直接用d命令删除整行了。而不是替换后的内容


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译