使用sed linux命令准备时的反向引用

uurity8g  于 2023-05-06  发布在  Linux
关注(0)|答案(3)|浏览(135)

我正在尝试使用以下命令添加“monkey”的第一个字符:

echo monkey | sed -E '/(.)onkey/i \1'

但是当我这样使用它时,输出显示

1
monkey

其实我希望看到:

m
monkey

但反向引用不起作用。请有人告诉我,如果它是可以使用反向引用与\1。先谢谢你了。

6rqinv9w

6rqinv9w1#

您可以使用sed

echo 'monkey' | sed -E 's/(.)onkey/\1\n&/'

m
monkey

这里:

  • \1:组#1的反向引用
  • \n:插入换行符
  • &:完全匹配的反向引用
4c8rllxm

4c8rllxm2#

对于任何版本的awk,您都可以尝试以下解决方案,并使用所示示例编写和测试。简单地搜索正则表达式^.onkey,然后使用sub函数将开始字母替换为本身,新行和本身,并打印值。

echo monkey | awk '/^.onkey/{sub(/^./,"&\n&")} 1'
6ju8rftf

6ju8rftf3#

这可能对你有用(GNU sed):

sed -E '/monkey/i m' file

仅在包含monkey的行上方插入包含m的行。
也许一个更通用的解决方案是在一个单词的上方插入该单词的第一个字符:

sed -E 'h;s/\B.*//;G' file

抄写这个单词。
删除除单词第一个字符以外的所有字符。
在原单词后面加上一个换行符。
打印结果。
注意:\B启动单词字符之间的匹配。\b表示一个字的开始或结束(\<\>分别表示)。

相关问题