Linux Shell脚本:如何剪切字符串的一部分
我有下面的字符串Linux Shell脚本:如何剪切字符串的一部分,linux,bash,shell,sed,Linux,Bash,Shell,Sed,我有下面的字符串 â â³ eGalax Inc. USB TouchController id=9 [slave pointer (2)] â â³ eGalax Inc. USB TouchController id=10 [slave pointer (2)] 想得到身份证的名单吗?如何使用sed或其他方法实现这一点 我将示例的内容粘贴到名为so.txt的文件中 $ cat so.txt | awk '{ print $7 }
â â³ eGalax Inc. USB TouchController id=9 [slave pointer (2)]
â â³ eGalax Inc. USB TouchController id=10 [slave pointer (2)]
想得到身份证的名单吗?如何使用sed或其他方法实现这一点 我将示例的内容粘贴到名为
so.txt的文件中
$ cat so.txt | awk '{ print $7 }' | cut -f2 -d"="
9
10
说明:
cat so.txt
将文件内容打印到stdout
李>
awk'{print$7}'
将打印第七列,即包含id=n的列
cut-f2-d“=”
将使用=
作为分隔符来剪切步骤2的输出,并获得第二列(-f2
)
如果您希望同时获得id=
,那么:
$ cat so.txt | awk '{ print $7 }'
id=9
id=10
使用正则表达式捕获id号并用该编号替换整行。类似这样的操作应该可以做到(将所有内容匹配到“id=”,然后匹配任意数量的数字,然后匹配行的其余部分):
对每一行执行此操作,就会得到ID列表。perl解决方案:
perl -nE 'say $1 if /id=(\d+)/' filename
您可以让awk
无需使用cut
即可完成所有操作:
awk '{print substr($7,index($7,"=")+1)}' inputfile
您可以使用split()
{Anything}id={ID}{space}{Anything}
{Anything}id={ID}{space}{Anything}
--
#/垃圾箱/垃圾箱
边读边读;做
rhs=${s##*id=}
id=${rhs%%*}
echo$id#在这里使用$id做你想做的事
这个方法给出了9和1,但应该是9和10,对了,我在粘贴sed行时犯了一个错误。更新后可以正常工作。Thaks这正是我想要的!猫和割的无用用法。awk可以做所有这些。@user229426:你的意思是不必要地使用cat和cut,而不是无用的,不是吗?这是将awk
与cut结合使用的一个很好的解释。我试图在另一个用例中得到这个确切的东西,并在awk手册页和awk教程中苦苦挣扎。非常感谢您花时间解释您的代码!
$ ruby -ne 'puts $_.scan(/id=(\d+)/)' file
9
10
{Anything}id={ID}{space}{Anything}
{Anything}id={ID}{space}{Anything}
#! /bin/sh
while read s; do
rhs=${s##*id=}
id=${rhs%% *}
echo $id # Do what you will with $id here
done <so.txt
#! /bin/sh
while read f1 f2 f3 f4 f5 f6 f7 rest
do
echo ${f7##id=}
done <so.txt