linux - 使用管道时类似于字符串操作的基本名称

标签 linux string bash echo

您好,提前感谢您的回答。

当我使用以下代码时,我得到如下输出:

  /home/pony/IOSO/test/A
  /home/pony/IOSO/test/B


FILE=last.cfg
DIR=$(realpath "$2") #or something else    
grep $DIR $FILE | awk '{ print $2 }' | sort | uniq # | basename does not work

如何让我的管道使用基本名称或类似的名称:

$ s=/the/path/foo.txt
$ echo ${s##*/}
foo.txt

最佳答案

您可以使用 awk 来完成此操作,这样就可以避免不必要地使用 grep awksed序列

正确的方法可以是

awk -v dir="$DIR" -F"/" '$0 ~ dir{print $NF}'

测试

$ DIR="/home/pony/IOSO/test"

$ cat input
/home/pony/IOSO/test/A
/home/pony/IOSO/test/B
/home/test/test

$ awk -v dir="$DIR" -F"/" '$0 ~ dir{print $NF}' input
A
B

它的作用

  • -v dir="$DIR" 使用 shell 变量 DIR 的值创建一个 awk 变量

  • -F"/" 将字段分隔符设置为/。这是在输入文件中完成的,目录由 / 分隔,我们需要获取最后一个字段,文件名。

  • '$0 ~ dir 检查每个输入行是否与变量 dir 中的模式匹配

  • print $NF 打印最后一个字段,这里是文件名。 NF 代表字段数。

关于linux - 使用管道时类似于字符串操作的基本名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29641927/

相关文章:

linux - 如何使用 cloudwatch 以外的脚本获取 AWS RDS CPU 和内存指标

linux - 在嵌入式系统上测试 Linux 守护进程

java - char[] 无法转换为 String

javascript - 从数组中删除随机字符串,JavaScript

linux - 如何使用 Awk/cut 获取 "/"之间的文本?

linux - 如何在 Telnet bash 脚本中设置超时?

c - 使用宏定义两个局部变量但具有相同的地址

python - 如何在Python文件中运行多个Linux命令

javascript - 正则表达式字符串匹配?

linux - 更改文件中附加数字的单词