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 外壳
我假设您实际上想看到带有 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)
但我猜你的真实文件真的有空行和中间你不想打印的东西。