如何在bash中剪切一些文本

时间:2014-08-13 07:45:59

标签: bash

在我的文件之后,我得到了以下输出:

pm/or { distribution: 'Old disctribution ', version_1: '6.5 (New)', version_2: '2.36' }

我想从此文件中剪切仅作为分发名称:旧的分发或仅作为版本_2:2.36。

作为输出我想得到: 旧的分发

有人可以帮忙怎么做?

5 个答案:

答案 0 :(得分:1)

尝试使用'作为分隔符进行剪切 类似的东西:

cut -d \' -f 2,6 myfile.txt > output.txt

我只是试试这个并且它正常运作

答案 1 :(得分:0)

awk -F\' '{ print $2 }' file

或者

awk -F\' '/pm/or {/ { print $2 }' file

答案 2 :(得分:0)

看起来模糊地想要解析JSON。如果您的文件格式差不多,但不完全是JSON,那么最好的办法是将其重塑为正确的JSON,然后使用合适的JSON工具。

 sed 's%^pm/or %%;s%\([_A-Za-z0-9]*\):%"\1":%g' myfile.txt | jq '.distribution'

可以从http://stedolan.github.io/jq/

获取jq工具

答案 3 :(得分:0)

您可以使用distribution获取awk密钥的值,如下所示:

awk -F"'" '{for(;i<=NF;i++) {if($i ~ /distribution: $/) print $(i+1)}}' file

答案 4 :(得分:0)

在脚本中也可以使用Bash参数扩展来处理提取所需的文本:

#!/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'

(与原文拼写)