Shell 删除没有第二个字段的行
我有下面给出的ldif格式的文件示例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
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”的备份文件。