如何在文本开头和结尾添加文本匹配$
输入示例:
$ 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 ) 变量,默认为\n
ewline;让我们看看 awk 读取记录时它们设置的一些内置变量默认值:
awk -d- '0' <<<'1'
awk 由两部分组成condition { action }
,其中至少有一个部分应该存在于 awk 命令中。
我们这里的条件是图案那就是/^\$/
(^
从一美元开始\$
,我们逃脱了,因为 like^
是记录开始的锚点,$
是该记录结束的锚点)。
我们通过在其周围添加固定字符串来$0="start " $0 " end"
更新记录,然后写回.start
end
$0
/pattern/ { action }1
,1
这里的 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