我的老师并没有真正查看sed脚本,因此他们非常困惑。我需要完成这个以获得A。它很快就会到期,所以我怀疑我有时间完全理解它,因为我根本不理解语法。
说明如下: 创建一个名为script3的sed脚本,该脚本将打印顶部带有“The Raven”的文件,用一个空格替换每个多个空格,并在每行下面打印30行破折号。
这是我到目前为止所做的:
echo "The Raven"
s/[ ]\{2,\}/ /g
/\,\./ s/^/------------------------------ /
答案 0 :(得分:3)
使用在线GNU sed manual:
i
command插入标题a
command在每行后添加分隔符s/[[:blank:]]\+/ /g
用单个空格替换任何水平空白字符:sed regular expressions 答案 1 :(得分:0)
enter code here
创建名为script3的sed脚本
所以创建一个文本文件calles script3 taht用sed -f script3 YourSoureFile
调用
内容是
1 i\
The raven
s/ \{2,\}/ /g
a\
------------------------------
将使用
打印文件顶部的“乌鸦”
1 i\
The raven
在第1(1)行,插入(i)下一行(跟随最后一行的每一行是NO NORE \
用一个空格替换每个多个空格的出现
s/ \{2,\}/ /g
替换(s ///)任何模式(分隔符/
之间的文本的一部分,由{2} \{2,\}
跟随空格 jsute组成,在出现规范之前,由singel空间第二个
,任何出现的事件(选项g)。这发生在每一行(行的头部没有数字或过滤模式,如先行线上的
1
)
并在每行下方打印30行破折号
a\
------------------------------
(a)像(i)那样工作,但在这种情况下附加。没有过滤器模式或数字表示行动,所以在每一行也是如此。
我和一个添加文本到ouptut但不在工作缓冲区上,所以这不能在这个sed动作中操作,这不是s ///在当前工作缓冲区上工作的情况(即在末尾打印)在开始新线之前处理线路) 这就是我到目前为止所做的:
关于您的脚本
echo "The Raven"
这不是一个sed动作,而是一个shell动作,所以,它不能像这样的sed工作(可以使用shell替换而不是目标normaly)
s/[ ]\{2,\}/ /g
没关系,这个空间[]
这个空间在这里不是必需的,但是好的。您可以使用[[:space:]]
或[[:blank:]]
或[[:space:][:blank:]]
在类中使用类型[:xxxxx:]
的元类
/\,\./ s/^/------------------------------ /
这将意味着*每次出现,.
(两者都按此顺序),用30 -
和空格替换(因此添加)行的开头。因此,它不会出现在每一行上,并且它在开始时不会在该行之后添加。使用s ///的方法可能是:
s/.*/&\
------------------------------/
每行替换每个字符(一次性全部)(&)后跟一个新行和30个短划线