簡體   English   中英

如何使用 SED 或 AWK 在一行中添加雙引號?

[英]How to add double quotes to a line with SED or AWK?

我有以下單詞列表:

name,id,3

我需要像這樣雙引號:

"name,id,3"

我試過sed 's/.*/\\"&\\"/g'並得到:

"name,id,3

其中只有一個雙引號並且缺少結束雙引號。

我也試過awk {print "\\""$1"\\""} ,結果完全相同。 我需要幫助。

使用它來將您的輸入傳送到:

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

^是行開始的錨點, $是行尾的錨點。 使用sed行,我們分別用""替換行開始和行結束。

例子:

$ echo -e "name,id,2\nname,id,3\nname,id,4"|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"

沒有sed

$ echo -e "name,id,2\nname,id,3\nname,id,4"
name,id,2
name,id,3
name,id,4

您的文件似乎有 DOS 行結尾。 它管道dos2unix第一

證明:

$ cat test.txt
name,id,2
name,id,3
name,id,4
$ sed 's/^/"/;s/$/"/' test.txt
"name,id,2
"name,id,3
"name,id,4
$ cat test.txt|dos2unix|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"

您的輸入文件在行尾有回車符。 您需要在文件上使用dos2unix來刪除它們。 或者你可以這樣做:

sed 's/\(.*\)\r/"\1"/g'

這將刪除回車並添加引號。

您可以像這樣使用 awk 而不是 sed:

line='name,id,3'
echo $line | awk '{printf("\"%s\"\n", $0);}'

或者更好的是使用 BASH printf 像這樣:

printf '"%s"\n' $line

我發現的最簡單的方法是使用雙引號的十六進制代碼:

 echo name,id,3 | awk '{print "\x22" $1 "\x22"}'
 "name,id,3"

類似於@Dennis 解決方案,

采用

sed 's/\(.*\)/"\1"/g'

無需查找 '\\r',這將對所有字符串應用雙引號。 這不需要在輸入文件上運行 dos2unix。

在使用 sed 命令之前,您可以使用 \\ 作為轉義字符,然后它會在您的字符串中打印 "。例如,我使用以下命令將類似的字符串放在文本文件的第一行:

var = "\"name,id,3\""
sed -i '1i' "$var" /tmp/out.txt

這對我有用:

echo name,id,3 | sed 's/name,id,3/"name,id,3"/'
"name,id,3"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM