Bash - 如何将每一行放在报价单中

Bin*_*ics 20 linux bash shell text

我想将每一行放在引号内,例如:

abcdefg
hijklmn
opqrst
Run Code Online (Sandbox Code Playgroud)

转换成:

"abcdefg"
"hijklmn"
"opqrst"
Run Code Online (Sandbox Code Playgroud)

如何在Bash shell脚本中执行此操作?

blu*_*lue 31

使用awk

awk '{ print "\""$0"\""}' inputfile
Run Code Online (Sandbox Code Playgroud)

使用纯粹的bash

while read FOO; do
   echo -e "\"$FOO\""
done < inputfile
Run Code Online (Sandbox Code Playgroud)

哪里inputfile是包含没有引号的行的文件.

如果你的文件有空行,awk肯定是要走的路:

awk 'NF { print "\""$0"\""}' inputfile
Run Code Online (Sandbox Code Playgroud)

NF告诉awk只有当字段数大于零(行不为空)时才执行print命令.


0zk*_* PM 10

我使用以下命令:

xargs -I{lin} echo \"{lin}\" < your_filename
Run Code Online (Sandbox Code Playgroud)

xargs取标准输入(从文件重定向),并通过一个线时间{lin}占位符,然后执行命令在明年,在这种情况下,echo有逃脱双引号.

您可以使用-ixargs选项省略占位符的名称,如下所示:

xargs -i echo \"{}\" < your_filename
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您的IFS必须是默认值或'\n'至少是.


cho*_*oba 6

使用sed:

sed -e 's/^\|$/"/g' file
Run Code Online (Sandbox Code Playgroud)

如果文件包含空行,则需要更多工作.

  • 可以做`sed's /.*/"&"/'` (6认同)

anu*_*ava 5

这个sed也适用于忽略空行:

sed -i.bak 's/^..*$/"&"/' inFile
Run Code Online (Sandbox Code Playgroud)

要么

sed 's/^.\{1,\}$/"&"/' inFile
Run Code Online (Sandbox Code Playgroud)