![查找并替换](https://linux22.com/image/134270/%E6%9F%A5%E6%89%BE%E5%B9%B6%E6%9B%BF%E6%8D%A2.png)
我有一个包含关键字的文件RESOURCE
。它可以出现在文件中的任何位置,例如:
[email protected]
现在我想替换[email protected]
为[email protected]
.我必须搜索可以找到关键字的行RESOURCE
,然后替换等号后面的单词。关键字RESOURCE
必须保持不变。
有人可以帮我解决这个问题吗?
输入:
[email protected]
输出:
[email protected]
答案1
grep
在这种情况下没有用,因为它不允许您修改文件的内容。
相反,人们可以sed
像这样使用:
fromaddr='[email protected]'
toaddr='[email protected]'
sed '/^RESOURCE=/s/='"$fromaddr"'$/='"$toaddr"'/' file >newfile
鉴于file
some data
[email protected]
[email protected]
[email protected]
[email protected]
more data
这创建newfile
为
some data
[email protected]
[email protected]
[email protected]
[email protected]
more data
该sed
表达式将选择以字符串 开头的行RESOURCE
。对于每个这样的行,它将替换电子邮件地址(如果该行中存在)。用于替换的模式确保我们匹配=
并且地址在行尾结束。
答案2
命令sed
比较好。
sed -i 's/[email protected]/[email protected]/' yourfile
上面的方法在我的测试中有效,但如果你想自己测试一下,那么你可以先尝试这个:
sed 's/[email protected]/[email protected]/' yourfile
这会将更改写入标准输出而不影响文件。
无论哪种方式,它都会提供您想要的更改:
[email protected]
RESOURCE
如果文件中的值不同并且您想要将其更改为不同的内容,则:
grep RESOURCE= yourfile
这将返回该行所在位置并显示该值。
然后您可以使用
sed 's/[email protected]/[email protected]/' yourfile
为了供将来参考,重要的是在您最初的问题中明确所有这些内容,以便您可以获得所需的帮助,而无需所有这些繁琐的内容。
答案3
您似乎是在说您想要替换出现在=
,
不管它是什么—
例如,在示例数据中,您想要替换[email protected]
.但你是说,无论后面的字符串=
是什么,你都想用它替换它[email protected]
——显然你想要硬编码。
关于如何执行此操作有一些变化。最简单的是
sed 's/RESOURCE=.*/[email protected]/'
它(像下面所有的命令一样)使用了.*
“匹配任何存在的东西”这一事实。如果您不想输入RESOURCE=
两次,可以将上面的内容缩短为
sed 's/\(RESOURCE=\).*/\[email protected]/'
其中\(
…\)
将搜索字符串的一部分标记为一个组(最多可以有九个组),并且\1
表示替换为第一组。
上述命令将查找并替换RESOURCE=
该行中出现的任何位置。因此,例如,输入
# Lakshminarayana wants to change all occurrences of "RESOURCE=".
[email protected]
[email protected]
[email protected]
FOX RESOURCE=The quick brown fox
# Comment: Originally line 2 said [email protected]
将更改为
# Lakshminarayana wants to change all occurrences of "[email protected]
[email protected]
[email protected]
[email protected]
FOX [email protected]
# Comment: Originally line 2 said [email protected]
如果您只想匹配RESOURCE=
出现在行首的时间,请使用^
:
sed 's/^RESOURCE=.*/[email protected]/'
或者
sed 's/^\(RESOURCE=\).*/\[email protected]/'
如果您只想替换资源值,而不是该行的整个其余部分 - 例如,
[email protected] [email protected]
到
[email protected] [email protected]
这也是可以做到的。编辑您的问题,准确说出您想要的内容,并提供完整、清晰的解释和例子。
好的,选择以上一项s
命令。现在,如果您想就地编辑文件(如您所示),请执行以下操作
sed -i { s command } { yourfile }
如果你想生成一个新文件,请执行
sed { s command } { oldfile } > { newfile }
实际上不要输入{
和}
;他们在那里只是为了划界。