我在创建sed脚本时遇到问题

时间:2014-12-15 20:01:45

标签: linux bash sed

我的老师并没有真正查看sed脚本,因此他们非常困惑。我需要完成这个以获得A。它很快就会到期,所以我怀疑我有时间完全理解它,因为我根本不理解语法。

说明如下: 创建一个名为script3的sed脚本,该脚本将打印顶部带有“The Raven”的文件,用一个空格替换每个多个空格,并在每行下面打印30行破折号。

这是我到目前为止所做的:

sed脚本

echo "The Raven"
s/[ ]\{2,\}/ /g
/\,\./ s/^/------------------------------ /

2 个答案:

答案 0 :(得分:3)

使用在线GNU sed manual

答案 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个短划线

相关问题