在文件中查找字符串并删除后面的两行

时间:2016-09-27 07:59:06

标签: string bash file unix sed

我是bash的新手,我想知道如何在文件中找到一个字符串,并从这个找到的字符串中删除两行。

我的文件格式如下:

username
pass
username2
pass2
username3
pass3

我想删除一个特定用户,例如:

./deleteftpuser username2

并拥有像

这样的文件
username
pass
username3
pass3

我想我应该使用sed命令,但我不知道应该如何使用它。

非常感谢你的帮助!

5 个答案:

答案 0 :(得分:1)

使用GNU sed

sed '/username2/ {N; d}' file.txt

使用awk

awk '/username2/ {np=1; next}; !np {print} np {np=0}' file.txt

示例:

% cat file.txt 
username
pass
username2
pass2
username3
pass3

% sed '/username2/ {N; d}' file.txt
username
pass
username3
pass3

% awk '/username2/ {np=1; next}; !np {print} np {np=0}' file.txt 
username
pass
username3
pass3

答案 1 :(得分:0)

sed -e '/username2/ { N; d; }' infile
username
pass
username3
pass3

答案 2 :(得分:0)

使用GNU sed

$ cat ip.txt 
username
pass
username2
pass2
username3
pass3

$ sed '/username2/,+1d' ip.txt 
username
pass
username3
pass3

这将搜索行匹配username2,然后删除该行加上一行。将其更改为+2以删除两行等等

perl

的通用解决方案
$ perl -ne 'if(/username2/){ $l = <> foreach(1..1) } else{ print }' ip.txt 
username
pass
username3
pass3

$ perl -ne 'if(/username2/){ $l = <> foreach(1..2) } else{ print }' ip.txt 
username
pass
pass3

$ # can also use: perl -pe 'if(/username2/){ undef $_; <> foreach(1..2) }' ip.txt 
  • 如果line与给定的模式匹配,则根据需要获取后面的行。
  • 否则,打印输入行

答案 3 :(得分:0)

Grep解决方案 -

$cat file

 username
 pass
 username2
 pass2
 username3
 pass3

grep -A 1 "username2" file > temp
grep -vf temp file

将搜索字符串及其后面的一行存储在文件temp中。 然后从文件中获取其他所有内容。

输出 -

username
pass
username3
pass3

答案 4 :(得分:0)

又一个awk解决方案。 public int reverse(int x) { String intString; StringBuilder sb = new StringBuilder(); if(x < 0){ sb.append("-"); x = x * -1; } intString = Integer.toString(x); for(int i = intString.length() - 1; i >= 0; i--){ sb.append(intString.charAt(i)); } String resultString = sb.toString(); int result = Integer.parseInt(resultString); return result; } 仅在p$0pusername2发生时才设置:

next