使用 sed 从特定列中删除 LF

使用 sed 从特定列中删除 LF

我有一个包含以 分隔的数据的文件|

例如:(输入)

a|b|c|d`LF`
D|e
a1|b1|c1|d1`LF`
d2|e1\n

输出:(LF从第 4 列删除)

a|b|c|dD|e
a1|b1|c1|d1d2|e1\n

我想LF使用 从特定列中删除sed。是否可以LF从特定列中删除字符。

答案1

你的意思是做类似的事情:

#!/usr/bin/awk -f

BEGIN { FS = "|"; OFS = "|"; i=0 }
{
    a[i]=(a[i] ? 
        sprintf("%s%s\n", a[i], $0) : sprintf("%s", $0))

    if(NF!=4) {
        ++i
    }
}
END {
    for(e in a) {
        printf("%s", a[e])
    }
}

然后你用以下命令运行它-f

awk -f script.awk text.txt

答案2

我认为您的输入文件是在 Windows 平台上制作的,以 CR(回车符)行结尾;

如果你这样做,cat -e filename.txt你会看到类似以下的内容(注意字符^M):

a|b|c|d^M$
D|e$
a1|b1|c1|d1^M$
d2|e1\n$

为此,您可以执行以下操作:

CR=$'\r' ; sed -E ":a /${CR}$/ { N; s/\n//; ta; }; s/${CR}//g;" infile.txt
a|b|c|dD|e
a1|b1|c1|d1d2|e1\n

如果你的 shell 不能识别,printf则使用CR=$(printf %s '\r')ANSI-C 引用语法类似$'\r'

相关内容