我需要帮助bash才能修改file.txt。我有名字,每个名字都在一行
例如
Peter
John
Markus
我需要他们在同一行和"在向量的每个元素之前和之后。
"Peter" "John" "Markus"
好吧,我可以插入"当我连续所有元素但我不知道如何修改形状......连续的所有行。
array=( Peter John Markus )
number=${#array[@]}
for ((i=0;i<number;i++)); do
array[i]="\"${array[i]}"\"
echo "${array[i]}"
done
答案 0 :(得分:2)
$ awk '{printf "\""$0"\" "} END{print""}' file
"Peter" "John" "Markus"
工作原理:
printf "\""$0"\" "
对于每一个新输入行$0
,这会打印出引号,行本身,引号和空格。
END{print""}
(可选)在我们读完文件的最后一行后,会打印出换行符。
$ sed 's/.*/"&"/' file | tr '\n' ' '
"Peter" "John" "Markus"
工作原理:
s/.*/"&"/
这会在每行
tr '\n' ' '
这将使用空格替换换行符,以便所有名称显示在同一行。
$ sed ':a;$!{N;ba};s/^/"/; s/$/"/; s/\n/" "/g' file
"Peter" "John" "Markus"
工作原理:
:a;$!{N;ba}
这会将整个文件读入模式空间。
s/^/"/
这会在文件开头添加引号
s/$/"/
这会在文件末尾添加引号。
s/\n/" "/g
这将使用以下三个字符替换每个换行符:quote-space-quote。
要将问题中的bash脚本打印在一行,可以使用echo -n
代替echo
。换句话说,替换:
echo "${array[i]}"
使用:
echo -n "${array[i]} "
从评论中,假设我们的文件在一行中包含所有名称,并且我们想要单独引用每个名称。使用:
$ cat file2
Peter John Markus
$ sed -r 's/[[:alnum:]]+/"&"/g' file2
"Peter" "John" "Markus"
以上是GNU sed
。在OSX或其他BSD系统上,尝试:
sed -E 's/[[:alnum:]]+/"&"/g' file2
答案 1 :(得分:0)
Perl救援:
perl -pe 'chomp; $_ = qq("$_" );chop if eof' < input
说明:
-p
逐行读取输入并打印$_
chomp
删除换行符$_ = qq("$_" )
将"
放在字符串之后,"<Space>
放在字符串之后。chop if eof
删除尾随空格。