My *_*ork 7 sed text-processing
我有一个很大的 JSON 文件,我想用其中的一个字符串替换另一个字符串。不应该,但可能会在我不想替换它的上下文中使用该字符串。
我知道它在正确上下文中的文件中出现了多少次,因此我还想打印该字符串的出现次数被替换为sed
. 我怎样才能做到这一点?
为了查找和替换我使用的字符串:
sed -i "" "s/my_string/new_string/g" my_file.json
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是 mac,但我也需要 Linux,例如:
sed -i "s/my_string/new_string/g" my_file.json
Run Code Online (Sandbox Code Playgroud)
我知道我可以运行 agrep
来查找文件中的字符串并返回计数,如下所示:
grep -o my_string my_file.json | wc -l
Run Code Online (Sandbox Code Playgroud)
但这不是我要问的。我问是否有一种方法可以像任何文本编辑器(word,记事本,geany,...)那样做 - 如果我给出一个字符串,它会告诉我它看到这个字符串并替换它的次数和另外一个。
更多信息——它将在 Bash 脚本中运行,因此如果有其他更好的方法,我对此持开放态度。
就用perl
代替吧。它几乎和 和 替换运算符一样可移植sed
(在这种情况下更可移植perl
,因为语法在任何已安装的机器上都是相同的)-i
,并且可以被告知打印替换数量:
perl -i -lpe '$k+= s/my_string/new_string/g; END{print "$k"}' my_file.json
Run Code Online (Sandbox Code Playgroud)
这将就地进行替换并将替换数打印到标准输出。
如果您必须使用 sed 那么一种方法可能是
根据@Phillipos 的建议,将其更改为:
sed -i "" -e '
s/my_string/new_string\
/g;s/\n//w /dev/stdout
s///g
' my_file.json | wc -l
Run Code Online (Sandbox Code Playgroud)