如何在文本开头和结尾添加与$匹配的文本

如何在文本开头和结尾添加与$匹配的文本

如何在文本开头和结尾添加文本匹配$

输入示例:

$ hello
$  yes
r no change

我想将文本添加到文件的开头和结尾并匹配$。我想要输出为

start $ hello end
start $  yes end 
r no change

答案1

另一种sed方法:

sed '/^\$/ s/.*/start & end/' infile

sed&是对 中匹配模式部分的反向引用s/<pattern>/<replace>/


awk你也可以做同样的事情:

awk '/^\$/{ $0="start " $0 " end" }1'  infile

in awk,$0代表当前记录/行;根据 awk 的内置功能分隔记录/行RS(埃科德Separator ) 变量,默认为\newline;让我们看看 awk 读取记录时它们设置的一些内置变量默认值:

awk -d- '0' <<<'1'

awk 由两部分组成condition { action },其中至少有一个部分应该存在于 awk 命令中。

我们这里的条件是图案那就是/^\$/^从一美元开始\$,我们逃脱了,因为 like^是记录开始的锚点,$是该记录结束的锚点)。

我们通过在其周围添加固定字符串来$0="start " $0 " end"更新记录,然后写回.startend$0

/pattern/ { action }11这里的 is 实际上是一个始终为真的条件,它启用 aek 的默认打印操作;您可以编写任何结果为 true 的条件并触发打印操作。

awk '/pattern/ { action }; 1!=0'
awk '/pattern/ { action }3'
...

print或者也使用操作本身:

awk '/pattern/ { action }; { print }'

答案2

$ sed '/^\$/{s/^/start /; s/$/ end/;}' abc.txt
start $ hello end

start $  yes end

r no change

相关内容