为了简单起见,我使用了一些 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'
我做错了什么?
抱歉,问题不在于
awk
,而在于printf
:
... | xargs bash -c 'printf %q\\n "$0" "$@"'
现在可以按预期工作了:
$'./c\nd"'
$'./\ng\n\nh\'\n'