使用 POSIX 工具重建多行字符串

问题描述 投票:0回答:1

为了简单起见,我使用了一些 bash 特定的功能,但问题是关于 POSIX 工具

我有一个文件,其中每条记录都以

./
开头,末尾有多余的换行符:

./a
b/
./c
d"
./
e

f
/
./
g

h'

我想做的是:

1.重建不以

/

结尾的记录

2.输出它们以供

xargs
处理

使用

printf '%q\n'
显示结果记录时的预期输出为:

$'./c\nd"'
$'./\ng\n\nh\'\n'

这是我尝试过的:

{ cat input.txt; echo ./; } |
awk -F '^[.]/' '
    function xargs_escape(s) {
        gsub(/[[:space:]\047"]/, "\\\\&", s);
        return s;
    }
    {
        if ( NF == 2 ) {
            if ( NR > 1 && record ~ /[^/]$/ )
                print xargs_escape(record)
            record = $0
        } else
            record = record "\n" $0
    }
' |
xargs bash -c 'printf %q\\n "$@"'

但我得到的是:

$'./\ng\n\nh\'\n'

我做错了什么?

shell awk posix
1个回答
0
投票

抱歉,问题不在于

awk
,而在于
printf

... | xargs bash -c 'printf %q\\n "$0" "$@"'

现在可以按预期工作了:

$'./c\nd"'
$'./\ng\n\nh\'\n'
© www.soinside.com 2019 - 2024. All rights reserved.