ChatGPT解决这个技术问题 Extra ChatGPT

如何用 sed 替换整行?

假设我有一个带行的文件

aaa=bbb

现在我想将它们替换为:

aaa=xxx

我可以这样做:

sed "s/aaa=bbb/aaa=xxx/g"

现在我有一个包含几行的文件,如下所示:

aaa=bbb
aaa=ccc
aaa=ddd
aaa=[something else]

如何使用 sed 将这些行 aaa=[something] 替换为 aaa=xxx

[something else] 是文字文本,还是只是一个占位符?等号后面的东西可能的格式是什么?
这更像是一个正则表达式问题而不是一个 sed 问题。

J
John Doyle

尝试这个:

sed "s/aaa=.*/aaa=xxx/g"

习惯的力量,在这种情况下可以忽略 - 它被用作行的全局替换来替换每个匹配项,而不仅仅是第一个匹配项。在这种情况下,由于 .*,只有第一个会被匹配。
Michael J. Barber,g 用替换替换所有正则表达式实例
添加 -i 以更改文件
M
Mr. T

您还可以使用 sed 的更改行来完成此操作:

sed -i "/aaa=/c\aaa=xxx" your_file_here

这将遍历并找到任何通过 aaa= 测试的行,这意味着该行包含字母 aaa=。然后它将整行替换为 aaa=xxx。您可以在测试的开头添加一个 ^ 以确保您只获得以 aaa= 开头的行,但这取决于您。


OS X 的 sed 要求 c 后跟一个反斜杠和一个换行符,并且它不会将换行符附加到插入的文本中,但您可以使用例如 $'/aaa=/c\\\naaa=xxx\n'
这是@Mr. change/replace feature 的 sed 文档中的示例。 T 正在谈论。
这是最接近实际做所要求的事情......(但便携性需要 Lri 的版本)
我喜欢它的地方:如果你匹配 range 行,c 将用一行替换整个范围:'/garbage_start/,/garbage_stop/c\[Garbage skipped]' s 不这样做。
M
Michael J. Barber

像这样:

sed 's/aaa=.*/aaa=xxx/'

如果您想保证 aaa= 位于行首,请将其设为:

sed 's/^aaa=.*/aaa=xxx/'

如果我想用 aaa='xxxx' 替换怎么办。我尝试像 sed 's/aaa=.*/aaa=\'xxx\'/' 一样转义,但这会在新行中打开一个 > 提示...
将单引号更改为双引号,例如 sed "s/aaa=.*/aaa='xxx'/g"
V
Vijay
sed -i.bak 's/\(aaa=\).*/\1"xxx"/g' your_file

j
jaypal singh

如果您想使用 awk,那么这也可以

awk -F= '{$2="xxx";print}' OFS="\=" filename

这如何检查“aaa”模式?
p
potong

这可能对您有用:

cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/'
> aaa=bbb
> aaa=ccc
> aaa=ddd
> aaa=[something else]
!
aaa=bbb
aaa=ccc
aaa=ddd
aaa=xxx

我认为对 bbbcccddd 的明确检查并不是 OP 所想的。