我想替换任何看起来像
的东西if (Thing *thing1 = Stuff) {
带
Thing *thing1 = Stuff;
if (thing1) {
基本上从if语句中取出声明。
我有所有部件,我发现他们是正确的,我只是在更换时遇到了麻烦
grep ' if (.* = .*) {' $file | while read -r line ; do
inside="$( echo "$line" | cut -d "(" -f2 | cut -d ")" -f1 );"
object="$( echo $( echo "$inside" | cut -d "*" -f2 | cut -d "=" -f1 ) | xargs )"
newIF=" if ($object) {"
replacement="$inside\n$newIF"
line_regexp="$(echo "$line" | sed -e 's/[]\/$*.^|[]/\\&/g')"
replacement_regexp="$(echo "$replacement" | sed -e 's/[\/&]/\\&/g')"
sed -i.bak "s/$line_regexp/$replacement_regexp/g" $file
done
感谢:https://superuser.com/questions/422459/substitution-in-text-file-without-regular-expressions
现在我只需要弄清楚如何将“\ n”变成实际的换行符
答案 0 :(得分:1)
这个sed应该适合你:
$ sed -n 's/if (\([^ ]* \*\([^ ]*\) = [^)]*\)) {/\1;\nif (\2) {/p' <<< "if (Thing *thing1 = Stuff) {"
Thing *thing1 = Stuff;
if (thing1) {