从 linux 中的文本文件中删除介词
removing prepositions from a text file in linux
我想做的是在 CentOS 中删除文本文件中的所有介词。像 'on of to the in at ....' 这样的东西。这是我的脚本:
!/bin/bash
list='i me my myself we our ours ourselves you your yours yourself ..... '
cat Hamlet.txt | for item in $list
do
sed 's/$item//g'
done > newHam.txt
但最后当我打开 newHam.txt 时没有任何变化!与Ham.txt相同。我不知道这是否是一个好方法。有什么建议吗?任何方法?
假设您的 sed
理解 \<
和 \>
的单词边界,
sed 's/\<\(i\|me\|my\|myself|\we|\our|\ours|\ourselves|\you|\your|\yours|\yourself\)\> \?//g' Hamlet.txt >newHam.txt
您想确保包括单词边界;您最初的尝试将取代例如i
输入的任何地方。
如果字符串中已有单词,可以将其插入 Bash 和
sed "s/\<\(${list// /\|}\)\> \?//g" Hamlet.txt >newHam.txt
但是 ${variable//pattern/substitution}
参数扩展不能移植到例如/bin/sh
。另请注意双引号而不是单引号对于允许 shell 在脚本中执行变量替换是必要的,以及所有文字反斜杠如何需要在双引号内用另一个反斜杠转义。
不幸的是,sed
的许多细节都没有标准化。具有讽刺意味的是,切换到一个根本不是标准的工具可能是最便携的解决方案。
perl -pe 'BEGIN {
@list = qw(i me my myself we our ours ourselves you your yours yourself .....);
$re = join("|", @list); }
s/\b($re)\b ?//go' Hamlet.txt >newHam.txt
如果你想把它作为一个独立的脚本,
#!/usr/bin/perl
BEGIN {
@list = qw(i me my myself we our ours ourselves you your yours yourself .....);
$re = join("|", @list);
}
while (<>) {
s/\b($re)\b ?//go;
print
}
这些词是代词,不是介词。
最后,注意修复脚本的 shebang;脚本的第一行需要恰好以 #!
这两个字符开头,因为这就是它成为 shebang 的原因。您以后还需要避免使用 useless cat
。
我想做的是在 CentOS 中删除文本文件中的所有介词。像 'on of to the in at ....' 这样的东西。这是我的脚本:
!/bin/bash
list='i me my myself we our ours ourselves you your yours yourself ..... '
cat Hamlet.txt | for item in $list
do
sed 's/$item//g'
done > newHam.txt
但最后当我打开 newHam.txt 时没有任何变化!与Ham.txt相同。我不知道这是否是一个好方法。有什么建议吗?任何方法?
假设您的 sed
理解 \<
和 \>
的单词边界,
sed 's/\<\(i\|me\|my\|myself|\we|\our|\ours|\ourselves|\you|\your|\yours|\yourself\)\> \?//g' Hamlet.txt >newHam.txt
您想确保包括单词边界;您最初的尝试将取代例如i
输入的任何地方。
如果字符串中已有单词,可以将其插入 Bash 和
sed "s/\<\(${list// /\|}\)\> \?//g" Hamlet.txt >newHam.txt
但是 ${variable//pattern/substitution}
参数扩展不能移植到例如/bin/sh
。另请注意双引号而不是单引号对于允许 shell 在脚本中执行变量替换是必要的,以及所有文字反斜杠如何需要在双引号内用另一个反斜杠转义。
不幸的是,sed
的许多细节都没有标准化。具有讽刺意味的是,切换到一个根本不是标准的工具可能是最便携的解决方案。
perl -pe 'BEGIN {
@list = qw(i me my myself we our ours ourselves you your yours yourself .....);
$re = join("|", @list); }
s/\b($re)\b ?//go' Hamlet.txt >newHam.txt
如果你想把它作为一个独立的脚本,
#!/usr/bin/perl
BEGIN {
@list = qw(i me my myself we our ours ourselves you your yours yourself .....);
$re = join("|", @list);
}
while (<>) {
s/\b($re)\b ?//go;
print
}
这些词是代词,不是介词。
最后,注意修复脚本的 shebang;脚本的第一行需要恰好以 #!
这两个字符开头,因为这就是它成为 shebang 的原因。您以后还需要避免使用 useless cat
。