Sed Grep并替换Grep结果中的字符

Sed Grep并替换Grep结果中的字符,sed,grep,Sed,Grep,我试图grep行从文件,然后从$1我试图改变字符。 乙二醇 我试着把以s开头的那条线涂成灰色 grep -e "S" 然后我想将file1.txt中所有灰色结果的第4个字符替换为x 我试过了 sed -i "s/./x/4" file1.txt 我怎样才能只对灰色结果执行此操作 您可以使用sed'/pattern/s/find/replace/'文件语法: 与您的文件一起: $ sed '/^S/s/./x/4' file Surxit Shixpa cchiku end of file

我试图grep行从文件,然后从$1我试图改变字符。 乙二醇

我试着把以s开头的那条线涂成灰色

grep -e "S"
然后我想将file1.txt中所有灰色结果的第4个字符替换为x

我试过了

sed -i "s/./x/4" file1.txt
我怎样才能只对灰色结果执行此操作

您可以使用sed'/pattern/s/find/replace/'文件语法:

与您的文件一起:

$ sed '/^S/s/./x/4' file
Surxit
Shixpa
cchiku
end of file
注意:我使用/^S/作为模式来匹配以S开头的行,因为如果您只说/S/它将匹配任何包含S的行。锚定^S指示行的开头。

您可以使用sed'/pattern/S/find/replace/'文件语法:

与您的文件一起:

$ sed '/^S/s/./x/4' file
Surxit
Shixpa
cchiku
end of file
注意:我使用/^S/作为模式来匹配以S开头的行,因为如果您只说/S/它将匹配任何包含S的行。锚定^S表示行的开头。

另一种方法是将以S开头的条件包括在模式本身中:

sed 's/^\(S..\)./\1x/' file
该命令匹配以S开头的行,并将S和以下两个字符放入匹配组中。在替换部分中,匹配组的内容将被重新使用,其后的下一个字符将被x替换。

替代方法是将以S开头的条件包括在模式本身中:

sed 's/^\(S..\)./\1x/' file

该命令匹配以S开头的行,并将S和以下两个字符放入匹配组中。在替换部分中,匹配组的内容将被重新使用,之后的下一个字符将被x替换。

它可以工作。若我使用的模式和grepping一些1美元从线那个么它会工作吗?我不能使用grep-eregxp | sedsomething@Raj当然,只需说sed/$1/s//x/4文件,或者把它放在一个var=$1,然后是sed/$var/s//x/4文件中,当然,你可以通过使用sed-n-e'/^s/s//x/4p'这样的东西来避免不必要的grep使用,只打印与初始模式匹配的行。它是有效的。若我使用的模式和grepping一些1美元从线那个么它会工作吗?我不能使用grep-eregxp | sedsomething@Raj当然,只要说sed/$1/s//x/4文件,或者把它放在一个var=$1,然后是sed/$var/s//x/4文件中,当然,你可以通过使用sed-n-e'/^s/s//x/4p'这样的东西来避免不必要的grep使用,只打印与初始模式匹配的行。很好!我很好奇,在内部什么是最好的:分别执行搜索,然后像我一样进行替换,或者像你一样在匹配部分进行匹配。我想这取决于输入数据,但让我们做一个简短的尝试吧!:。。。。分钟…@fedorqui我刚刚做了一个简短的测试:对上面的输入文件进行自动cat,直到我们得到一个有2亿行的文件。你的答案花了1:59分钟,我的答案花了1:17分钟。事实上,这是有道理的。多么有趣,我会猜到相反的情况,因为你的正则表达式似乎更贵,所以需要更多的时间来计算。谢谢你的比较@事实上,正则表达式并没有那么复杂。但我也认为正则表达式的复杂性是这里的关键。当然,与输入数据结合使用,很好!我很好奇,在内部什么是最好的:分别执行搜索,然后像我一样进行替换,或者像你一样在匹配部分进行匹配。我想这取决于输入数据,但让我们做一个简短的尝试吧!:。。。。分钟…@fedorqui我刚刚做了一个简短的测试:对上面的输入文件进行自动cat,直到我们得到一个有2亿行的文件。你的答案花了1:59分钟,我的答案花了1:17分钟。事实上,这是有道理的。多么有趣,我会猜到相反的情况,因为你的正则表达式似乎更贵,所以需要更多的时间来计算。谢谢你的比较@事实上,正则表达式并没有那么复杂。但我也认为正则表达式的复杂性是这里的关键。当然要结合输入数据
awk -v FS="" -v OFS="" '/^S/{$4="x"}1' infile
Surxit
Shixpa
cchiku
end of file