use*_*171 3 bash awk space sed
我有一个文件格式如下:
First Last UID
First Middle Last UID
Run Code Online (Sandbox Code Playgroud)
基本上,一些名称具有中间名称(有时多于一个中间名称).我只想要一个只作为UID的文件.
是否有可以运行的sed或awk命令在最后一个空格之前删除所有内容?
使用awk打印每行的最后一个字段.
使用NF
包含每行的字段数的变量索引最后一个字段.我们使用美元符号对其进行索引,因此生成的单行程很容易.
awk '{ print $NF }' file
Run Code Online (Sandbox Code Playgroud)
另一种方法是转置文件的内容,然后抓住最后一行并再次转置(这很容易看到).
生成的管道是:
cat file | rs -T | tail -n1 | rs -T
Run Code Online (Sandbox Code Playgroud)
使用切割,rev
我们也可以通过反转线条,切割第一个区域然后再次反转来实现这一目标.
rev file | cut -d ' ' -f1 | rev
Run Code Online (Sandbox Code Playgroud)
使用sed我们只需删除所有字符,直到找到正则表达式 的空格^.* [^ ]*$
.这个正则表达式意味着匹配行的开头^
,然后是任何字符序列.*
和空格. The rest is a sequence of non spaces
[^ ]*
直到行尾$
.sed one-liner是:
sed 's/^.* \([^ ]*\)$/\1/' file
Run Code Online (Sandbox Code Playgroud)
我们在那里拍摄的最后一部分(之间\(
和\)
)和次回在整条生产线.\1
表示第一个捕获的组,这是最后一个字段.
正如Ed Norton巧妙地指出的那样,我们可能根本无法抓住该组并删除正则表达式的前一部分.这可以很容易实现
sed 's/.* //' file
这显然不那么复杂,更优雅.
有关更多信息,请参阅man sed
和man awk
.