删除没有第二个字段的行

时间:2014-04-08 06:25:30

标签: shell sed awk

我的文件采用下面给出的ldif格式示例

cn: DINAKAR PERI
deptcode: DBS
sn: PERI
givenName: DINAKAR
roomNo: B 208
officePhone:
Resphone:
mail: dinakar@tifr.res.in
officePhone:
mobile:

我想删除没有第二个字段的行。

输出:

cn: DINAKAR PERI
deptcode: DBS
sn: PERI
givenName: DINAKAR
roomNo: B 208
mail: dinakar@tifr.res.in

我试过这个命令

awk 'NF > 1' test.ldif >test1.ldif

效果很好但不符合我的要求。

由于 Sagar的

5 个答案:

答案 0 :(得分:1)

这样做

awk 'NF > 1' test.ldif > tmp && mv tmp test.ldif

您无法写入正在阅读的文件。使用tmp文件选项
如果&&的输出为awk

,则会运行ok

sed-i选项可以进行就地编辑,awk没有。{/ p>

答案 1 :(得分:1)

对于这个问题,sed可能会更容易,因为它会自行更改原位:

sed -i -n '/[[:space:]][[:alnum:]]/p' test.ldif

-i选项告诉sed更改文件,正如您尝试的那样,就位-n选项告诉sed除非我们要求,否则不要打印行。命令/[[:space:]][[:alnum:]]/p告诉sed查找其中有空格的行后跟一个字符并打印这些行。因此,最终文件中的唯一行是具有第二个字段的行。

答案 2 :(得分:1)

我更新shell脚本并且知识较少,但我使用以下命令

文件内的

:%s/.*: *$/dd/gc -- this replace my all blank lines with dd

y to all

on shell

#sed '/^dd/d' test.ldif > test1.ldif -- this will remove all line begining with dd

谢谢你们所有人。

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed -i 's/\S\+/&/2;t;d' file

如果您不能用自己替换第二个非空白字段,请删除该行。

答案 4 :(得分:0)

使用sed

sed '/:[ \t]*$/d' test.ldif >test1.ldif

如果您的sed支持-i选项,则可以直接更新

sed -i '/:[ \t]*$/d' test.ldif