【发布时间】:2012-08-29 17:42:07
【问题描述】:
我需要一些帮助来删除某些文件中第 1 行(并且只有第 1 行)的第二次匹配之后(包括)该行的其余部分。例如,如果模式是星号 *:
输入:
asd*asd*asd*asd*asd*
asdasdasd*asdasdasd*asdasdasd*asdasdasd
预期输出:
asd*asd
asdasdasd*asdasdasd*asdasdasd*asdasdasd
谢谢!
【问题讨论】:
我需要一些帮助来删除某些文件中第 1 行(并且只有第 1 行)的第二次匹配之后(包括)该行的其余部分。例如,如果模式是星号 *:
输入:
asd*asd*asd*asd*asd*
asdasdasd*asdasdasd*asdasdasd*asdasdasd
预期输出:
asd*asd
asdasdasd*asdasdasd*asdasdasd*asdasdasd
谢谢!
【问题讨论】:
一个awk解决方案:
awk '
BEGIN { FS = OFS = "*" }
FNR == 1 {
print $1, $2
}
FNR > 1 {
print
}
' infile
产生:
asd*asd
asdasdasd*asdasdasd*asdasdasd*asdasdasd
【讨论】:
要将操作限制在一行,请使用“地址”:
sed '1s/\([^*]\*[^*]*\).*/\1/'
【讨论】:
sed 无法表示选项卡。您可以使用 bash 的引用来帮助它:sed $'1s/\([^\t]\t[^\t]*\).*/\\1/'
这可能对你有用(GNU sed):
sed '1s/\*[^*]*//2g' file
【讨论】:
2g 会产生未指定的行为,因此不要依赖于其他 sed 实现。