关于shell中的sed表达式评估

时间:2013-08-22 09:42:03

标签: linux shell sed

有人可以解释下面sed语句的含义吗?

sed -i "s/PS1\='\\\\u\@[^]]*:/PS1\='\\\\u\@\\\\H:/g" test

1 个答案:

答案 0 :(得分:2)

首先,请注意PS1是bash提示符。有关更多参考,请参阅How to: Change / Setup bash custom prompt (PS1)

sed -i "s/PS1\='\\\\u\@[^]]*:/PS1\='\\\\u\@\\\\H:/g" test

它会查找文本PS1\='\\u\@[^]]*:并将其替换为PS1\='\\u\@\\H:文件中的test

sed 's/hello/bye/g' file是查找hello的基本sed命令,并在byefile表示“全局”的所有内容中将g替换为sed,因此它每次找到文本时都会这样做。

虽然此-i表达式在stdout上显示结果,但如果您希望结果更新文件,则可以添加PS1\='\\u\@[^]]*:选项。

然后,请注意,我提到所查找的文字是sed,而PS1\='\\\\u\@[^]]*:表达式中我们看到\。这就是为什么必须转义任何\ ...并且PS1\='\\u\@[^]]*: 字符用于执行此操作。

关于寻找的特定模式:

PS1='\\u\@` 
+
any string until the character `]` is found
+
:

表示像

这样的文字
PS1\='\\u\@[hello how are you]:

因此它会匹配PS1\='\\u\@\\H:等文字。

用{{1}}替换它们。