为澄清而编辑
感谢@KamilCuk、@Jetchill和@chepner以一种有意义的方式解释
首先,对任何失误表示歉意。我不是一个程序员。我目前正在使用OSX 10.14.6和OSX标准终端。
短期问题:
sed '5d' *.txt
不是删除目录中每个文本文件的第5行。
背景
我有成千上万的纯文本新闻文章,我将用它们来进行语料库分析。因此,我想从文件中删除不相关的文本信息。
文章都采用以下格式(为了清晰起见,添加了行号(:
1. <blank line>
2. <article heading>
3. <date>
4. <blank line>
5. Body
单词";身体;总是出现在第5行,总是大写,并且总是自己。
我只想去掉第5行,或者只去掉具有单词"1"的行;身体;其本身(因为文章中几乎肯定会包含"身体"一词(。
通过阅读大量页面,以下内容应该有效:
sed '5d' file
所以,就我而言:
sed '5d' *.txt
然而,这对我不起作用,也不适用于我尝试过的任何其他变体(使用*或*.txt(
sed -i '5d' *.txt
sed -i '' '5d' *.txt
sed -e '5d' *.txt
它总是删除第一个文件的第5行,但没有删除目录中的其他文件,所以有一些工作正在进行。
或者,是否有一种方法指定删除字符串";身体;当它是一行中唯一的单词时?
很明显,我有错误的一端在这里,所以任何方向都将不胜感激。
来自POSIX规范:
地址是一个十进制数,用于对文件中的输入行进行累积计数,是一个对输入的最后一行进行寻址的"$"字符,或者是一个上下文地址(如sed中正则表达式中所述,由BRE组成,前后有分隔符,通常为a(。
因此,命令5d
只删除作为一个整体的文件的第5行,但您希望每个文件都有第5行。
我无论如何都不认为";重置";地址,所以您必须指定一个上下文地址。
sed -i '' '/^Body$/d' *.txt
这将删除仅由单词Body
组成的每一行;CCD_ 3匹配一行的开头,CCD_。
或者,只需为每个文件分别运行sed
。
for f in *.txt; do sed -i '' '5d' "$f"; done