如果sed linux mint 17中的模式匹配,则删除所有行

如果sed linux mint 17中的模式匹配,则删除所有行,linux,bash,shell,sed,Linux,Bash,Shell,Sed,我对shell脚本非常陌生 我正在抓取一个网站,抓取的文本包含大量重复。例如,通常它们是论坛上的菜单。大多数情况下,我是用Python实现的,但我认为sed命令可以节省我阅读和打印输入、循环等的时间。我想从同一个文件中删除数千行重复的行。我不想把它复制到另一个文件中,因为我将得到100个新文件。下面是我从bashshell运行的一个影子脚本 #!/bin/sed -f sed -i '/^how$/d' input_file.txt sed -i '/^is test$/d' input_fil

我对shell脚本非常陌生

我正在抓取一个网站,抓取的文本包含大量重复。例如,通常它们是论坛上的菜单。大多数情况下,我是用Python实现的,但我认为
sed
命令可以节省我阅读和打印输入、循环等的时间。我想从同一个文件中删除数千行重复的行。我不想把它复制到另一个文件中,因为我将得到100个新文件。下面是我从bashshell运行的一个影子脚本

#!/bin/sed -f
sed -i '/^how$/d' input_file.txt
sed -i '/^is test$/d' input_file.txt
sed -i '/^repeated text/d' input_file.txt
这是输入文件的内容:

how to do this task
why it is not working
this is test
Stackoverflow is a very helpful community of programmers
that is test
this is text
repeated text is common
this is repeated text of the above line
然后在shell中运行以下命令:

sed -f scriptFile input_file.txt
我得到以下错误

sed: scriptFile line 2: untermindated `s' command
如何更正脚本,以及应该使用什么样的命令语法才能使其正常工作


非常感谢您的帮助

假设你知道你的脚本在做什么,那么很容易将它们放入脚本中。在您的情况下,脚本应该是:

/^how$/d
/^is test$/d
/^repeated text/d
这就够了

使脚本单独成为可执行脚本也很容易:

#!/usr/bin/env sed -f
/^how$/d
/^is test$/d
/^repeated text/d
然后


举个例子,用egrep加mv不是更容易吗

egrep -v 'pattern1|pattern2|pattern3|...' <input_file.txt >tmpfile.txt
mv tmpfile.txt input_file.txt
egrep-v'pattern1 | pattern2 | pattern3 |……'tmpfile.txt
mv tmpfile.txt输入文件
每个模式都会描述被删除的行,就像在sed中一样。您不会得到其他文件,因为mv会删除这些文件


如果您有太多的模式,以至于不想直接在命令行上指定它们,那么可以使用egrep的-f选项将它们存储在文件中

我在脚本中没有看到
s
命令。你真的发布了你正在使用的完整的原始脚本吗?而且,大多数图案看起来都很奇怪<例如,code>/^how$/匹配的行仅包含how一词,行中没有其他内容。感谢@HUSTMPHRR的友好回复。我确实知道代码的作用。我用Python中的reqex来做这件事。但它需要大量的循环,读取文件并再次写入。塞德帮我省了很多工作。你的回答奏效了,再次感谢你。
sed -f sedscript <old >new
# sed comment - This script changes lower case vowels to upper case
s/a/A/g
s/e/E/g
s/i/I/g
s/o/O/g
s/u/U/g
egrep -v 'pattern1|pattern2|pattern3|...' <input_file.txt >tmpfile.txt
mv tmpfile.txt input_file.txt