查找并替换

查找并替换

我有一个包含关键字的文件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 }

实际上不要输入{};他们在那里只是为了划界。

相关内容