0

配管の問題を解決しようとしています。私の目標はこのようなものです

replace $1 $2 index.html | split -d ':' | minify main.css

main.css からの出力はどこにありますか

main.css:main.min.css

そして、index.html は次のようになります。

<link href="main.css" />

これに:

<link href="main.min.css" />

これは単純な例ですが、私の問題を示していると思います。

  • 編集 1

さて、配管が逆になっていますが、まだわかりません。

これはより簡単な例です

echo 'foo:bar' | split -d ':' | replace $1 $2 -- index.html

そのようなコマンドは可能ですか?

  • 編集 2

とても近い!

minify css/main.css | replace $(cut -f1 -) $(cut -f2 -) index.html

何らかの理由でカットがSTDINを読み取れないことを除いて、これは機能します:(通常実行すると正しい値を返しますが、replaceコマンドの引数としてそれらが必要です

4

2 に答える 2

1

2つの異なるソース(パイプと入力ファイル)から入力を読み取ろうとしているため、ワンライナーでこれを行うことはできないと思います。ただし、このようなものが機能する可能性があります。

IFS_SAVE=$IFS
IFS=: a=( `echo "foo:bar"` )
sed -i "s/${a[0]}/${a[1]}/g" index.html
IFS=$IFS_SAVE

このIFS=:命令は、次のコマンドのフィールドセパレータを改行からに変更します:。これにより、ネストさechoれたフィールドは2つのフィールドをbash配列に配置し( ... )ます。配列要素には、次のようにアクセスできます。${varname[index]}

sed -iファイル内でインプレース置換を行いますindex.html。それが不要な場合は、を削除して-i、出力を新しいファイルにリダイレクトします。

sed "s/${a[0]}/${a[1]}/g" index.html > output.html
于 2012-10-23T23:18:01.663 に答える
0
IFS=: read -ra a <<<'foo:bar'
ed -s index.html <<EOF
g/${a}/s,,${a[1]}
w
EOF
于 2012-10-24T07:43:18.370 に答える