我是bash的新手,我想知道如何在文件中找到一个字符串,并从这个找到的字符串中删除两行。
我的文件格式如下:
username
pass
username2
pass2
username3
pass3
我想删除一个特定用户,例如:
./deleteftpuser username2
并拥有像
这样的文件username
pass
username3
pass3
我想我应该使用sed命令,但我不知道应该如何使用它。
非常感谢你的帮助!
答案 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
答案 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
或$0
为p
且username2
发生时才设置:
next