Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 修改文件中的数据分布_Bash - Fatal编程技术网

Bash 修改文件中的数据分布

Bash 修改文件中的数据分布,bash,Bash,我需要bash的帮助来修改file.txt。我有名字,每个名字排成一行 比如说 Peter John Markus 我需要它们在同一行中,在向量的每个元素的前面和末尾加上“的 "Peter" "John" "Markus" 好吧,我可以插入“当我有一行中的所有元素,但我不知道如何修改形状…一行中的所有线 array=( Peter John Markus ) number=${#array[@]} for ((i=0;i<number;i++)); do array[i]="\"${

我需要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
array=(彼得·约翰·马库斯)
number=${#数组[@]}
对于((i=0;iPerl)的救援:

perl -pe 'chomp; $_ = qq("$_" );chop if eof' < input
perl-pe'chomp;$\uqq($);如果eof'
说明:

  • -p
    逐行读取输入并打印
    $中的内容
  • chomp
    删除换行符
  • $\uqq(“$\u”)
    在字符串前面和后面放置一个
  • 如果eof
    删除尾随空格,则将其切掉
带awk 工作原理:

  • printf“\”“$0”\”“

    对于每一行新的输入,
    $0
    ,这将打印出一个引号、行本身、引号和空格

  • END{print”“}

    (可选)在读取文件的最后一行后,将打印一个换行符

与sed和tr 工作原理:

  • s/*/“&”/

    这会在每一行前后加上一个引号

  • tr'\n''

    这将用空格替换换行符,以便所有名称显示在同一行上

只有塞德一个人 工作原理:

  • :a;$!{N;ba}

    这会将整个文件读入模式空间

  • s/^/“/

    这会在文件的开头添加一个引号

  • s/$/“/

    这会在文件末尾添加一个引号

  • s/\n/“”/g

    这将用三个字符替换每个换行符:quote space quote

猛击 要使问题中的bash脚本打印在一行上,可以使用
echo-n
代替
echo
。换句话说,替换:

echo "${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

谢谢你在这两种情况下的评论。非常有用。这对我很有帮助。欢迎你。另外,我刚刚添加了一种方法,让你的bash脚本在一行上打印所有内容。另一个问题,如果我在同一行的txt文件中有Peter John Markus的名字,我想在每个名字之前和之后加上“我该怎么做?我应该从sed的s/*/修改什么?”&“/”file.txt?我想我必须很容易地更改&@EnricAgudPique。我只是在答案中添加了一个部分。很好的解决方案,如果我希望引用标点符号和其他字符,那么最好使用[:blank:],不是吗?非常有用
echo "${array[i]}"
echo -n "${array[i]} "
$ cat file2
Peter John Markus
$ sed -r 's/[[:alnum:]]+/"&"/g' file2
"Peter" "John" "Markus"
sed -E 's/[[:alnum:]]+/"&"/g' file2