我知道如何使用 sed 一次一步地編輯文件,但是如何創建一個實際的 sed 腳本,然後在文件上使用它來執行與各個 sed 命令相同的操作?例如這 3 個 sed 指令:
sed -i '4i\ ' 培根文件
sed -i 's/,/\t\t/' 培根文件
sed -i 's/,/ /' 培根文件
答案1
將指令放入文件中
將這些行放入名為 的腳本檔案中script.sed
。
4i\
s/,/\t\t/
s/,/ /
然後像這樣運行它:
$ sed -i -f script.sed baconFile
製作獨立的 sed 腳本
如果您希望它是單一可執行文件,請執行以下操作:
#/bin/bash
sed -i '
4i\
s/,/\t\t/
s/,/ /
' "$@"
將以上行放入名為 的檔案中script.bash
,使其可執行(chmod +x script.bash
,然後像這樣運行它:
$ script.bash baconFile
建立腳本文件
你可以用這個方法來製作我上面提到的文件。
$ cat > script.bash <<EOF
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
EOF
這將生成腳本文件。您可以使用此命令進行確認:
$ cat script.bash
#!/bin/bash
4i\
s/,/\t\t/
s/,/ /
答案2
sed -i '4i\
s/,/\t\t/
s/,/ /' baconFile
sed 的工作方式與大多數解釋器類似,多個命令可以位於單獨的行上或由;
.如果你沒有GNU sed
第一行可能會導致錯誤。
要建立 sed 腳本,您只需在 shebang 中給出 sed 解釋器的絕對路徑即可。並確保該文件是可執行的。
#!/bin/sed -f
s/foo/bar/
chmod u+x foo
./foo <<<foo
bar
或者該腳本可以與 sed 命令一起呼叫。
sed -i -f foo file
答案3
你需要這個-f
選項sed -f sed-script
答案4
您可以編寫 bash 或 korn shell 腳本來執行此操作。如果你想讓它動態化,你可以讓它接受一個檔案名稱作為參數,你可以在任何你想要的檔案上執行這些 sed 指令。
建立一個新文件,例如updatefile.sh
#!/bin/bash
#$1 is the first parameter being passed when calling the script. The variable filename will be used to refer to this.
filename=$1
sed '4i\ ' filename
sed 's/,/\t\t/' filename
sed 's/,/ /' filename
然後您可以運行updatefile.sh baconFile
它將運行該檔案的所有三個 sed 命令baconFile
。
此外,g
sed 中的選項將更新檔案中所有出現的變數。例如:
sed 's/,/ /g' filename