用于从文件中提取字符的脚本

时间:2013-12-18 21:41:27

标签: regex sed awk grep

我有一个文本文件,如下所示:

/* 0 */
{
    "_id" : ObjectId("abcd")
}

/* 1 */
{
    "_id" : ObjectId("432432")
}

/* 2 */
{
    "_id" : ObjectId("32132121")
}

/* 3 */
{
    "_id" : ObjectId("321312")
}

我想从文件中仅提取ObjectId。

我的输出应该是这样的:

abcd
432432
32132121
321312

如果我使用grep或awk,它的正确shell脚本是什么?

6 个答案:

答案 0 :(得分:6)

这就完成了工作:

grep -Po ' ObjectId\("\K[^"]*' file

如果你喜欢awk:

awk -F' ObjectId\\("' '{sub(/".*$/,"",$2)}$0=$2' file

答案 1 :(得分:2)

使用sed。

sed -n '/ObjectId/ s/.*"\(.*\)")/\1/p' file

答案 2 :(得分:1)

另一种你可以用gawk做的方法:

gawk 'match($0, /ObjectId\("(.*)"\)/, res) {print res[1]}' file

答案 3 :(得分:1)

使用awk

awk -F\" '/ObjectId/ {print $4}' file
abcd
432432
32132121
321312

如果行在同一行中有多个数据,则可以使用此gnu awk(由于RS)

cat file
/* 0 */
{
    "tac" : TacID("data") "_id" : ObjectId("abcd")
}

/* 1 */
{
    "_id" : ObjectId("432432") "tac" : TacID("data")
}

/* 2 */
{
    "_id" : ObjectId("32132121")
}

/* 3 */
{
    "_id" : ObjectId("321312")
}

awk -F\" 'NR>1 {print $2}' RS="ObjectId" file
abcd
432432
32132121
321312

另一个gnu awk(由于gensub)如果同一行中有多个字段,则读取正确的字段。

awk '/ObjectId/ {print gensub(/.*ObjectId[(]"([^"]+).*/,"\\1","g")}' file

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed -n '/.*ObjectId("\([^"]*\)").*/s//\1/p' file

答案 5 :(得分:0)

sed -n '/.*\([^"]*\)")/ s//\1/p' YourFile

基于样本