我想在文件中查找一个字符串:
例子
https://google.com/first/second/45683
我想重写它并保留原来的行:
https://google.com/first/second/45683 https://yahoo.com/third/fourth/45683
我尝试过几次
sed -r 's@https://google.com/first/second/([a-Z0-9]+)@yahoo.com/third/fourth/\1@' 文件.txt 输出: yahoo.com/third/fourth/45683
它进行了重写,但没有保留原始行。
另一次尝试
sed -r 'a\s@https://google.com/first/second/([a-Z0-9]+)@yahoo.com/third/fourth/\1@' 文件.txt 输出: https://google.com/first/second/45683 https://google.com/first/second/([a-Z0-9]+)@yahoo.com/third/fourth/1@
它附加两行但不会重写第二行。
sed
在使用命令修改匹配行之前,您需要先打印出匹配的行s//
。如下所示:或者更短一点,
这表示“对于与表达式匹配的行
https://google.com/first/second/[a-zA-Z0-9]+
,首先打印出该行,然后使用给定的s//
表达式进行修改”。修改后的行会被打印出来,因为这是 的默认行为sed
。保持简单(愚蠢):
快捷方式
&
是整个左匹配部分。看起来像这样:
我得到:
享受。
使用 GNU awk 将第三个参数设置为
match()
:你尝试过这个吗?
通过转义正斜杠来提高清晰度:
希望这有帮助!