我是一名研究员,我在Unix命令方面的技能有限。我目前正在处理一个包含大约1000个文件的文件夹,我必须从该文件夹中提取一些文件名,并创建包含这些文件名的另一个文件(配置文件)。
基本上,该文件夹的文件名格式如下:
1_Apple_A_someword.txt
1_Apple_B_someword.txt
2_Apple_A_someword.txt
2_Apple_B_someword.txt
3_Apple_A_someword.txt
3_Apple_B_someword.txt
等等直到
1000_Apple_A_someword.txt
1000_Apple_B_someword.txt
我只想提取出所有包含“Apple_A”的文件。另外,我想创建另一个文件,其中包含每个“Apple_A”文件的“标签”(Unix变量),这些文件的值是文件的名称。此外,'标签'是文件名的一部分(直到单词“Apple”之前的所有内容)例如,
1_Apple=1_Apple_A_someword.txt
2_Apple=2_Apple_A_someword.txt
3_Apple=3_Apple_A_someword.txt
依此类推......直到
1000_Apple=1000_Apple_A_someword.txt
你能告诉我一个单行的Unix命令吗?也许使用“awk”和“sed”
答案 0 :(得分:2)
尝试
ls *Apple_A* | sed 's/\(\(.*Apple\).*\)$/\2=\1/'
答案 1 :(得分:1)
这可能适合你(GNU sed):
ls -1 | sed '/^\([0-9]\+_Apple\)_A/!d;s//\1=&/'
答案 2 :(得分:0)
awk版本,仅供参考:
ls -1 | awk -vFS='_' '/Apple_A/ {print $1"_"$2"="$0}'
答案 3 :(得分:0)
ls -1|perl -F_ -ane 'if($_=~m/Apple_A/){print $F[0]."_".$F[1]."=".$_}'