如何筛选某个字段中有尾随空格的行?

时间:2014-02-03 12:59:08

标签: linux bash sed awk grep

如何从某个字段中有尾随空格的文件中过滤记录?例如,如果我有一个包含这些行的文件(|作为字段分隔符):

a232|var1|var2
a342 |var1|var2
a234|var1|var2

过滤应返回一行

a342 |var1|var2

我不想删除这些空格。我试过这个:

awk '$1 ~ /[\s]+$/' myfile.txt

但它不起作用。

6 个答案:

答案 0 :(得分:2)

您的行几乎是正确的,但如果不是FS则需要定义space,在您的情况下是pipe

awk -F\| '$1~/[[:space:]]+$/'

您可以将$1更改为$x以过滤“特定”字段。

试验:

kent$  echo "a232|var1|var2
a342 |var1|var2
a234|var1|var2"|awk -F\| '$1~/[[:space:]]+$/'
a342 |var1|var2

答案 1 :(得分:1)

您可以使用grep执行此操作:

grep '^[^|]* |'

答案 2 :(得分:1)

试试这个

sed -n 's/\(.*\) |.*/\n&/p'

答案 3 :(得分:0)

像这样使用grep:

grep " |" yourfile

或更常见的

grep "\s|" yourfile

答案 4 :(得分:0)

从您的示例中

a232|var1|var2
a342 |var1|var2
a234|var1|var2

试试这个,

sed -n 2p filename

此处,2p表示您正在过滤文件的第二行。

如果你想过滤第三行,那么代码将如下所示,

sed -n 3p filename

一般情况下,我们可以说明sed -n Np filename

此处,N代表您要从给定文件中过滤的行索引。

答案 5 :(得分:0)

sed -n '/\(.*\)[[:blank:]]\|/ p' YourFile
GNU sed的

--posix