Shell 删除没有第二个字段的行

Shell 删除没有第二个字段的行,shell,sed,awk,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

我有下面给出的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
它工作得很好,但不符合我的要求

谢谢 萨加尔

你喜欢这样吗

awk 'NF > 1' test.ldif > tmp && mv tmp test.ldif
无法写入正在读取的文件。使用tmp文件选项 如果awk的输出正常,&&将运行

sed有-i选项进行就地编辑,而awk没有

awk 'NF > 1' test.ldif > tmp && mv tmp test.ldif
无法写入正在读取的文件。使用tmp文件选项 如果awk的输出正常,&&将运行

sed有-i选项进行就地编辑,而awk没有。

对于此问题,sed可能更容易,因为它将自行就地更改:

sed -i -n '/[[:space:]][[:alnum:]]/p' test.ldif
i选项告诉sed在适当的位置更改文件,就像您试图做的那样。n选项告诉sed除非我们要求,否则不要打印行。命令/[:space:][[:alnum:][]/pto告诉sed查找后跟字符的空格行并打印这些行。因此,在最终文件中结束的行只有第二个字段。

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

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

i选项告诉sed在适当的位置更改文件,就像您试图做的那样。n选项告诉sed除非我们要求,否则不要打印行。命令/[:space:][[:alnum:][]/pto告诉sed查找后跟字符的空格行并打印这些行。因此,最后一个文件中的行只有第二个字段。

我对shell脚本比较新,知识也比较少,但我使用了下面的命令

文件内部

:%s/.*: *$/dd/gc -- this replace my all blank lines with dd
向所有人致意

壳上

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

谢谢大家。

我对shell脚本比较新,知识也比较少,但我是用下面的命令完成的

文件内部

:%s/.*: *$/dd/gc -- this replace my all blank lines with dd
向所有人致意

壳上

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

使用sed

sed '/:[ \t]*$/d' test.ldif >test1.ldif
如果您的sed支持-i选项,您可以直接更新它

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

sed '/:[ \t]*$/d' test.ldif >test1.ldif
如果您的sed支持-i选项,您可以直接更新它

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

这可能适用于GNU sed:

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

如果第二个非空白字段本身无法替换,请删除该行。

这可能适用于GNU-sed:

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

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

如果Resphone:,awk等词后面有空格,则此操作失败,请忽略此操作。你也可以加入这个选项,在“…@Jotne”中写sed-in,谢谢。我更新了代码以处理尾随空格的情况。您还可以加入该选项并写入sed-in:No。以这种方式加入会导致创建一个后缀为“n”的备份文件,以及其他问题。如果Resphone:,awk等单词后面有空格,则此操作将失败。忽略此操作。你也可以加入这个选项,在“…@Jotne”中写sed-in,谢谢。我更新了代码以处理尾随空格的情况。您还可以加入该选项并写入sed-in:No。以这种方式加入它会导致创建一个后缀为“n”的备份文件。