私はこれ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
)は、オプションではなく最初の引数でコマンドラインの解析オプションを停止しますが、コマンドラインを並べ替えると、sed
GNU(他の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}/file2
sed
- :入力時にsed
実行sed
tee
sed
オプション:出力をファイルに書き込むには> /path/to/file
上書きするか、追加する>> /path/to/file
には追加します。