解释shell声明

时间:2011-02-16 15:15:51

标签: shell sed io cat

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

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

使用以下语句创建输入文件(我理解这一点):

nl -ba input.txt >> withLineNumbers.txt

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

感谢您的时间。

3 个答案:

答案 0 :(得分:4)

sed正则表达式只是删除每行的前7个字符。正则表达式^.......表示“行的开头有7个字符”。 sed参数s/^.......//用空字符串替换上面的正则表达式。

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

答案 1 :(得分:0)

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

搜索是正则表达式。 '^'表示匹配行的开头。每个'。'意味着匹配任何角色。因此搜索表达式匹配每行的前7个字符。然后用空字符串替换它。所以sed正在做的是删除每一行的前7个字符。

实现同样思考的更简单方法可能是:

cut -b8- withLineNumbers.txt > withoutLineNumbers.txt

答案 2 :(得分:0)

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

 awk  '{print $2}' withLineNumbers.txt

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

如果您的数据有空格,

awk  '{$1="";print substr($0,2)}' withLineNumbers.txt