sed 替换指定字符串之前的内容 不在行首,要求指定的字符串不变
时间: 2023-10-21 20:07:17 浏览: 126
如果要替换指定字符串之前的内容,但是该字符串不在行首,而且要求指定的字符串不变,可以使用sed命令的正则表达式中的"lookbehind"语法和"反向引用"。
例如,假设我们要将文件中所有以"Hello"开头的单词替换为"Hi",但是"Hello"可能出现在单词的中间或末尾,并且要求"Hello"不变,可以使用以下命令:
```
sed 's/\b\(\w*\)Hello/\1&/g;s/Hello/Hi/g' filename
```
其中,"\b"表示单词边界,"\(\w*\)"表示匹配前面的单词并将其保存到一个分组中,"Hello"表示要替换的字符串,"&"表示反向引用前面的匹配结果。这个命令首先将所有以"Hello"开头的单词后面的"Hello"用"&"替换,然后再将"Hello"替换为"Hi"。这样就能够保留"Hello"不变,同时替换指定字符串之前的内容。
相关问题
sed 替换指定字符串之前的内容 不在行首
如果要替换指定字符串之前的内容,但是该字符串不在行首,可以使用sed命令的正则表达式中的"lookbehind"语法。"lookbehind"语法用于匹配在指定字符串之前的内容,但不包括该字符串本身。
例如,假设我们要将文件中所有以"Hello"开头的单词替换为"Hi",但是"Hello"可能出现在单词的中间或末尾,可以使用以下命令:
```
sed 's/\b\(\w*\)Hello/\1Hi/g' filename
```
其中,"\b"表示单词边界,"\(\w*\)"表示匹配前面的单词并将其保存到一个分组中,"Hello"表示要替换的字符串。这个命令会将所有以"Hello"开头的单词替换为"Hi"。
阅读全文