将所有 sed 命令放入一个 shell 脚本文件中

Ano*_*ous 3 vim command-line bash sed

本质上,我得到了一个文本文件,应该通过 sed 命令来处理它。我总共有大约 7 个 sed 命令,并且需要将它们全部放在一个 shell 脚本中以在运行此脚本时生成一个输出。

要拧紧的文本文件: students.txt

学生.txt:

DogG DOGGGGGGGG
dog dog dog Jamesb
JamesBrady
derghnregnrig
JamesBeody
Run Code Online (Sandbox Code Playgroud)

所以第一个 sed 去掉了第一行和最后一行。第二个 sed 用 DOGGGG 替换 dog 第三个 sed 使用 JamesBrady 查找并打印所有行 第四个 sed 使用 derghnregnrig 查找并打印所有行

Sed 命令(BS 示例):

sed -e '1d' -e '$d' -e '/^$/d' students.txt
sed -n s/dog/DOGGGG/g students.txt
sed -n /JamesBrady/p students.txt
sed -n /derghnregnrig/p students.txt
Run Code Online (Sandbox Code Playgroud)

以上 sed 命令都放在一个 shell 脚本文件中,并且在运行时应该将其(累积?)效果输出到一个文本文件(students.txt)

到目前为止,我已尝试查找执行此操作的正确程序,但遇到的只是混乱。有人能以初学者的耐心清晰地解释一下如何将多个 sed 命令以及与此相关的任何命令(awk、grep 等)放入单个 shell 脚本文件中吗?

使用 Ubuntu 16.04,Vim。Bash 外壳

Zan*_*nna 7

我假设您实际上想看到带有 DOGGGG 的那一行,因为您正在编辑它(否则,何必呢?)

使用 { } 对块中的命令进行分组...

sed -n '{
       1d
       $d
       /^$/d
       s/dog/DOGGGG/g
       /DOGGGG/p
       /JamesBrady/p
       /derghnregnrig/p
}' students.txt
Run Code Online (Sandbox Code Playgroud)

结果:

  DOGGGG DOGGGG DOGGGG Jamesb
  JamesBrady
  derghnregnrig
Run Code Online (Sandbox Code Playgroud)

对于您的示例,您不需要所有这些...

sed -n '{
       1d
       $d
       s/dog/DOGGGG/g;p
}' students.txt
Run Code Online (Sandbox Code Playgroud)

但我猜你的真实文件真的有空行和中间你不想打印的东西。

  • 将其放入带有 `#!/usr/bin/env sed -f` 的脚本中,http://unix.stackexchange.com/a/95940/85039 (2认同)