sed
使用するものが1つありますMakefile
。端末で動作します。コマンドは
sed -n '/[{]/,/[}]/{
p
/[}]/a\
//end of block matching brace
}' myfile.txt
これにより、次のエラーメッセージが表示されますmake
。
/bin/sh: 2: Syntax error: Unterminated quoted string
バックスラッシュを追加するか、すべてを1行に入れると、次のような結果が得られます。
sed: -e expression #1, char 14: extra characters after command
どんな助けでも大変感謝します。
答え1
努力する
$ sed -n -e '/[{]/,/[}]/{p; /[}]/ a\ //end of block matching brace' -e' }' file
{sdfg
If I add backslashes or place everything on one line I get
df }
//end of block matching brace
-e
追加されたテキストを終了する必要があるため、2つの(式)オプションが必要です。すべてのsed
バージョンで同じ行にテキストを追加することはできません(私のGNUはsed
許可しますが、FreeBSDはsed
許可しません)。
答え2
makefileの改行、バックスラッシュ(特に)に問題があるたびにG
sedのコマンドを使用します。さらに重要なのは、Posix sed内に滞在できることです。
$ sed -e '/[{]/,/[}]/!d' -e '/[}]/G' -e 's|\n|&//end of block matching brace|' myfile.xt
答え3
Gnu makeと許可シェルを使用すると、makeは外部レシピを異なる方法で処理するため、$''
中間変数を使用できます。\eol
make -f - <<\!
define mycmd
sed -n $$'/[{]/,/[}]/{\n\
p\n\
/[}]/a\\\n\
//end of block matching brace\n\
}' myfile.txt
endef
.PHONY: default
default:
$(mycmd)
!
各行が\n\
追加され、単一行が\
2倍になります。 Makeは\eol
外部式を空白に変換し、すべてが1行で終わるようにし、シェルは実際の改行に$''
変換します。変数の設定に\n
使用する必要はありません。同様に動作します。define
MYCMD = sed...