我知道如何使用 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