是否有 Unix 命令来引用输入行?

wef*_*fa3 4 shell bash xargs command

我想知道是否有一个过滤器命令来引用输入行。

所以当管道:

line number 1
line number 2
line number 3
Run Code Online (Sandbox Code Playgroud)

到它,你得到:

"line number 1"
"line number 2"
"line number 3"
Run Code Online (Sandbox Code Playgroud)

我需要这个命令来通过管道传输行以xargs确保xargs将其line number 1视为一个参数而不是三个参数。我相信它还有许多其他用途。

有这样的命令吗?这叫什么?

ter*_*don 8

不是专门为它设计的,而是许多多功能工具可以做到这一点:

  • sed 's/^/"/;s/$/"/'

  • perl -pe 's/^/"/;s/$/"/' 或者 perl -lne 'print "\"$_\""'

  • awk '{printf "\"%s\"\n",$0}'

  • while read -r line; do printf '"%s"\n' "$line"; done

(所有这些都假设该行不包含双引号。如果包含,它将中断xargs


Sob*_*que 7

我会提供 Perl 的quotemeta功能。不是你的要求,因为它避开了空间,而不是用引号替换它们。

但作为附带福利,它还处理其他特殊字符(如*):

perl -nle 'print quotemeta'
Run Code Online (Sandbox Code Playgroud)

(或者在评论中指出的,较短的形式:perl -ple '$_=quotemeta'

这需要你的台词并将它们变成:

line\ number\ 1
line\ number\ 2
line\ number\ 3
Run Code Online (Sandbox Code Playgroud)

应该有相同的结果 - 以及处理:

Line number \"`rm -rf *`\"
Run Code Online (Sandbox Code Playgroud)

和类似的恶作剧:)