Sed

如何 cat 和 sed 一起使用?

  • April 5, 2019

我有這個cat然後sed操作:

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

這可以在一行中完成嗎?

我可能會在這裡錯過這種方式,但在我看來,這種解釋似乎是為了處理與此相反的情況,而且我也未能將上述內容統一到一個沒有雙與號 ( ) 或分號 ( ) 的操作cat中,並且越來越接近假設這是不可能的,但我在這裡問很重要,因為我可能錯了。sed``&&``;

並非所有說英語的讀者都熟悉“與號”或“分號”這些術語,所以我詳細說明了這些。

是的:

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

您的程式碼首先製作第一個文件的副本,然後使用內聯編輯更改副本sed -i。上面的程式碼從原始文件中讀取,進行更改,然後將結果寫入新文件。這裡沒有必要cat

如果您使用sed的是 GNU 並且$location_x可能包含前導-,則需要確保該路徑不被解釋為命令行標誌:

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

雙破折號表示命令行選項的結束。另一種方法是使用<將文件的內容重定向到sed. 其他sed實現(BSD sed)在第一個非選項參數處停止解析命令行選項,而 GNU sed(與其他一些 GNU 軟體一樣)在解析命令行時重新排列命令行。

對於此特定的編輯操作(將所有零更改為一),以下內容也將起作用:

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

請注意,tr始終從標準輸入讀取,因此<從原始文件重定向輸入。


我注意到在您的sed命令行上,您嘗試訪問/${location_y}/file2,這與它上面一行的路徑(/路徑開頭的路徑)不同。這可能是一個錯字。

引用自:https://unix.stackexchange.com/questions/422005