印刷可能な文字を含むことができる複雑な文字列を置き換える必要があります。これは私がsed
を使用して置き換えることができなかった実際のパターンの例です。Sed/Awkは、印刷可能な文字を含む複雑な文字列を置き換えます。
<!-- %cmd: for F in $(find ../[09]* -maxdepth 1 -type d -printf "%P\n") | grep -v "^$"; do echo "<li><a href=\"$F\">$F</a></li>"; done -->
元の文字列が印刷可能な文字のみで構成されなければならないので、私も競合を避けるために、非印刷可能なSED区切り文字を使用しています:
DELIM=$(echo -en "\001");
しかし、それは動作しません。私は多くのことを試しましたが、私は何が欠けているのか分かりません。例えば:
echo "BEFORE $PATTERN AFTER" | sed -e "s${DELIM}${PATTERN}${DELIM}NEWTEXT${DELIM}"
UPDATE-1:
新しいものと一致する文字列を交換しながら提供される解決策は、コンテナのテキストのすべての行を印刷しなければなりません。
pattern='<!-- %cmd: for F in $(find ../[0-9]* -maxdepth 0 -type d | sed "s/^\.\.\///"); do echo "<li><a href=\"$F\">$F</a></li>"; done -->'
container='
<h2>Title</h2>
<ul>
<!-- %cmd: for F in $(find ../[0-9]* -maxdepth 0 -type d | sed "s/^\.\.\///"); do echo "<li><a href=\"$F\">$F</a></li>"; done -->
</ul>
'
UPDATE-2:
awk -v repl="newtext" 'FNR==NR {
a = a $0; next
} n = index($0, a) {
$0 = substr($0, 1, n-1) repl substr($0, n+length(a))
} 1' < (printf '%s\n' "$pattern") <(printf '%s' "$container")
反復のカップルの後、これは@anubhavaによって構築作業、最終的な受け入れ答えです
[編集ヘルプ](http://stackoverflow.com/editing-help)をご覧ください。ラインに4つの空白を付ける。 – Cyrus