私はあまり成功せずに努力してきました。2 つの単語間の単語のキャプチャそして2つの下線の間にある単語を探す他の多くの中で...
「##」の前の改行文字を探したいです。この「##」は「## baba」の後に続きます。しかし、その直後にはなく、その間にいくつかのテキストがあります。ファイルには常に \n が先行する「##」がたくさんあります。以下のスキーマを参照してください。
希望の出力
##
## baba {could also be "foo" or "bar"}
rosa rosa rosam rosae ipsum
{append or replace the '\n' before '\n##' with -> helloworld here}
##
##
見つけたら、「helloworld」をスクリプトに引数として挿入します。
私の現在のスクリプトは次を探します。
awk -i inplace -v foo=$2 -v new=$1'\n\n' 'f&&/^##/{print new; f=0} {print} /^## baba/{f=1}' a.md
私は2つのことをしたいと思います:1 / babaをパラメータ$ 2(変数foo)に置き換え、2 / \ nを^##でラップして1行上にします。
助けてくれてありがとう
編集:Rudicのおかげで、次のことを見つけました。
禁煙健康増進協会
sed -re "/## $1/,/^\n\n##/ {s/^## *$/$2\n\n\n&/}" a.md
MD
##
## baba
rosa rosa rosam rosae ipsum
##
##
コマンドライン
cat a.md && echo "---------------" && ./test.sh baba remember140416sewol
ただし、出力には2つの欠陥があります。 1/は各一致に対して作成され、最初の一致のみが必要です。2/は他の改行の前に新しい行を置き換えません。
##
## baba
rosa rosa rosam rosae ipsum
{\n <-extra new line}
remember140416sewol
##
remember140416sewol {<-- extra occurence}
##
ベストアンサー1
次のように見えます。
sed '/## *baba/,/^##/ {s/^## *$/helloworld\n&/}' file
または引数で与えられた場合、
sed "/## *$2/,/^##/ {s/^## *$/$1\n&/}" file