如何在bash中剪切一些文本
在cat my file之后,我得到了以下输出:如何在bash中剪切一些文本,bash,Bash,在cat my file之后,我得到了以下输出: pm/or { distribution: 'Old disctribution ', version_1: '6.5 (New)', version_2: '2.36' } 我只想从这个文件中剪切,例如分发名:Old distribution,或者仅从版本_2:2.36 作为输出,我希望得到: 旧分配 有人能帮我怎么做吗?试着用“作为分隔符来剪切它 比如: cut -d \' -f 2,6 myfile.txt > output.txt
pm/or { distribution: 'Old disctribution ', version_1: '6.5 (New)', version_2: '2.36' }
我只想从这个文件中剪切,例如分发名:Old distribution,或者仅从版本_2:2.36
作为输出,我希望得到:
旧分配
有人能帮我怎么做吗?试着用
“
作为分隔符来剪切它
比如:
cut -d \' -f 2,6 myfile.txt > output.txt
我只是试试这个,它工作正常
awk -F\' '{ print $2 }' file
或
看起来好像您正在尝试解析JSON。如果您的文件格式几乎是JSON,但不完全是JSON,那么最好的办法可能是将其重塑为正确的JSON,然后使用正确的JSON工具
sed 's%^pm/or %%;s%\([_A-Za-z0-9]*\):%"\1":%g' myfile.txt | jq '.distribution'
jq
工具可从获得。您可以使用awk
获得分布
键的值,如下所示:
awk -F"'" '{for(;i<=NF;i++) {if($i ~ /distribution: $/) print $(i+1)}}' file
awk-F“'”{for(;iBash参数扩展也可以从脚本中进行,以处理所需文本的提取:
#!/bin/bash
temp=`cat dat/catfile.txt` # read file into temp
temp="${temp##*ion: \'}" # remove begin to 'ion: \''
echo "string '${temp%%[^a-z]\',*version*}'" # remove end to first version
输入:
$ cat dat/catfile.txt
pm/or { distribution: 'Old disctribution ', version_1: '6.5 (New)', version_2: '2.36' }
$ cutcat.sh
string 'Old disctribution'
输出:
$ cat dat/catfile.txt
pm/or { distribution: 'Old disctribution ', version_1: '6.5 (New)', version_2: '2.36' }
$ cutcat.sh
string 'Old disctribution'
(拼写与原文相同)sed
脚本中的第二个命令不完全正确;如果您在冒号前引用了包含文本的字符串,它会弄乱您的数据。您的示例数据看起来很简单,我觉得我可以安全地切入这个特定的角点。它可能不是JSON。JSON不使用单引号。嗯,是的。我应该这也是一个问题,但这已经变得比我想象的要复杂一些了。