catとsedを同時に使用する方法は? [コピー]

catとsedを同時に使用する方法は? [コピー]

私はこれcatをしましたsed

cat ${location_x}/file_1 > ${location_y}/file2
sed -i "s/0/1/g" /${location_y}/file2

これを1行で実行できますか?

このまま恋しいかもしれないここしかし、この説明はその反対の問題を扱っているようで、上記の内容を二重アンパサンド()やセミコロン()なしでは単一の作業に統合することはできず、ますますcat近づいています。これが不可能だと仮定すると、しかし私が間違っているかもしれないのでここに尋ねることが重要です。sed&&;

英語を話すすべての読者が「&」や「セミコロン」という用語に慣れているわけではないので、これらの用語について詳しく説明します。

答え1

例:

sed 's/0/1/g' "$location_x/file_1" >"$location_y/file2"

コードは最初に最初のファイルのコピーを作成し、次に使用しますsed -i。上記のコードは元のファイルから読み取って変更し、結果を新しいファイルに書き込みます。ここには必要ありませんcat

GNUを使用していてLeadingを含めるsedことができる場合は、パスがコマンドラインフラグとして解釈されないようにする必要があります。$location_x-

sed -e 's/0/1/g' -- "$location_x/file_1" >"$location_y/file2"

デュアルダッシュはコマンドラインオプションの終わりを示します。代替案は、<ファイルの内容をにリダイレクトすることですsed。他sedの実装(BSD sed)は、オプションではなく最初の引数でコマンドラインの解析オプションを停止しますが、コマンドラインを並べ替えると、sedGNU(他のGNUソフトウェアと同様)は再起動されます。 。

この特定の編集操作(すべて0を1に変更)の場合、以下も機能します。

tr '0' '1' <"$location_x/file_1" >"$location_y/file2"

読み取りはtr常に標準入力から行われるため、<入力は元のファイルからリダイレクトされます。


sed私はコマンドラインからアクセスしようとしていますが/${location_y}/file2、その上の行のパス(/パスの先頭にあるパス)とは異なることがわかりました。オタイルかもしれません。

答え2

tee他のアプローチを使用する代替ソリューション:

cat "${location_x}/file1" |\
  tee "${location_y}/file2" |\
  sed -i "s/0/1/g"

以下を行います。

- cat: 読んで${location_x}/file1送信します。tee

- tee:入力を書き込んでパイプしますcat${location_y}/file2sed

- :入力時にsed実行sedtee

sedオプション:出力をファイルに書き込むには> /path/to/file上書きするか、追加する>> /path/to/fileには追加します。

関連情報