ファイルの内容を置き換えるには、正規表現パターンの.shで$ 1を使用してください。

ファイルの内容を置き換えるには、正規表現パターンの.shで$ 1を使用してください。

私はあまり成功せずに努力してきました。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

おすすめ記事