文件替换文件时扩展变量,使用它们作为字符串文字,并添加换行符

时间:2016-09-20 22:54:10

标签: bash sed

我想替换任何看起来像

的东西
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”变成实际的换行符

1 个答案:

答案 0 :(得分:1)

这个sed应该适合你:

$ sed -n 's/if (\([^ ]* \*\([^ ]*\) = [^)]*\)) {/\1;\nif (\2) {/p' <<< "if (Thing *thing1 = Stuff) {"
Thing *thing1 = Stuff;
if (thing1) {