我有一个文本文件,如下所示:
/* 0 */
{
"_id" : ObjectId("abcd")
}
/* 1 */
{
"_id" : ObjectId("432432")
}
/* 2 */
{
"_id" : ObjectId("32132121")
}
/* 3 */
{
"_id" : ObjectId("321312")
}
我想从文件中仅提取ObjectId。
我的输出应该是这样的:
abcd
432432
32132121
321312
如果我使用grep或awk,它的正确shell脚本是什么?
答案 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
基于样本