我的文件采用下面给出的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的
答案 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