下面是我的腳本,它將接受文件輸入或標準輸入...但我不能逃避權利! - 我已經試過單引號和雙引號等..Bash腳本和引用SED
while read line
do
sed 's/path\/12345/path\/12345 == useful name/g'
sed 's/path\/6789/path\/6789 == useful name - 2/g'
done < ${1:-/dev/stdin}
下面是我的腳本,它將接受文件輸入或標準輸入...但我不能逃避權利! - 我已經試過單引號和雙引號等..Bash腳本和引用SED
while read line
do
sed 's/path\/12345/path\/12345 == useful name/g'
sed 's/path\/6789/path\/6789 == useful name - 2/g'
done < ${1:-/dev/stdin}
從標準輸入讀取的sed
命令一樣的while read
循環。這導致混亂。
你可能只想要這個(周圍沒有while read; do …; done
環 - 看到chat):
sed -e 's/path\/12345/path\/12345 == useful name/g' \
-e 's/path\/6789/path\/6789 == useful name - 2/g' \
"[email protected]"
裏面的腳本,這將在命令行或標準上規定的所有文件運行sed
腳本如果沒有指定文件,則輸入。這就是"[email protected]"
在這方面的含義。
$ cat > script.sh
sed -e 's/path\/12345/path\/12345 == useful name/g' \
-e 's/path\/6789/path\/6789 == useful name - 2/g' \
"[email protected]"
$ bash script.sh
path/12345
path/12345 == useful name
path/23456
path/23456
path/6789
path/6789 == useful name - 2
android-path/67890-twirling
android-path/6789 == useful name - 20-twirling
$
我輸入4行:
path/12345
path/23456
path/6789
android-path/67890-twirling
其它行是從腳本的輸出。當我把四個輸入線到一個文件data
,我得到的輸出:
$ bash script.sh data
path/12345 == useful name
path/23456
path/6789 == useful name - 2
android-path/6789 == useful name - 20-twirling
$
這看起來像什麼腳本應該做的事。我們可以辯論最後一行是否應該被映射,但腳本中使用的表達式會執行顯示的映射。
請注意,在名稱中使用空格來生成文件名(路徑)會強調腳本 - 在操作文件和目錄時需要小心。可以辦到;你只需要小心(雙引號是你的朋友)。 –
謝謝我只是試圖更新文本,即在myfile.txt我有一個路徑,說'路徑/ 12345',我想用路徑/ 12345 ==有用的名稱替換它 – Tony
當您使用'sed'要操縱路徑,改變分隔符幾乎總是一個好主意。 'sed's @ path/12345 @ path/12345 ==有用的名字@ g'' –