1

以下语句将删除 txt 文件中的行号:

cat withLineNumbers.txt | sed 's/^.......//' >> withoutLineNumbers.txt

输入文件是使用以下语句创建的(我理解这个):

nl -ba input.txt >> withLineNumbers.txt

我知道 cat 的功能,并且我知道输出已写入“withoutLineNumbers.txt”文件。但对我来说,这部分'| sed 's/^.......//''并不是很清楚。

谢谢你的时间。

4

3 回答 3

4

该 sed 正则表达式只是从每行中删除前 7 个字符。正则表达式^.......表示“行首的任意 7 个字符”。sed 参数s/^.......//将上述正则表达式替换为空字符串。

有关更多信息,请参阅sed(1)手册页。

于 2011-02-16T15:19:37.917 回答
0

sed 正在搜索和替换。's'表示搜索,下一个字符('/')是分隔符,搜索表达式是'^.......',替换表达式是一个空字符串(即最后两个斜杠之间的所有内容) )。

搜索是一个正则表达式。'^' 表示匹配行首。每个 '。' 表示匹配任何字符。所以搜索表达式匹配每行的前 7 个字符。然后将其替换为空字符串。所以 sed 正在做的是删除每行的前 7 个字符。

实现相同想法的更简单方法可能是:

cut -b8- withLineNumbers.txt > withoutLineNumbers.txt
于 2011-02-16T15:22:50.817 回答
0

该 sed 语句说删除前 7 个字符。一个点“。” 表示任何字符。有一种更简单的方法可以做到这一点

 awk  '{print $2}' withLineNumbers.txt

您只需要使用 awk 打印出第二列。无需使用正则表达式

如果您的数据有空格,

awk  '{$1="";print substr($0,2)}' withLineNumbers.txt
于 2011-02-16T15:24:30.977 回答