有人可以解释下面sed语句的含义吗?
sed -i "s/PS1\='\\\\u\@[^]]*:/PS1\='\\\\u\@\\\\H:/g" test
答案 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命令,并在bye
(file
表示“全局”的所有内容中将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}}替换它们。