Shell 以迭代方式将目录名的Grep/Awk部分转换为变量

Shell 以迭代方式将目录名的Grep/Awk部分转换为变量,shell,awk,grep,Shell,Awk,Grep,我试图将目录名的一部分保存到变量中,以便将其添加到文件名的开头 这就是我到目前为止所做的: var=1 CH=`ls | awk '/[0-9]{2}(?=_.*)/ {if (NR=$var) print $0}'` echo $CH 文件夹名称类似于01\u Startup。但是回声是空白的。我想不出来。有人知道这在shell脚本中是否可行吗?我不太清楚|的顺序以及如何组合命令。谢谢 树: 等等。awk不支持PCRE,因此正向前瞻不起作用。另外,bash变量不能像这样被调用到awk 我从您

我试图将目录名的一部分保存到变量中,以便将其添加到文件名的开头

这就是我到目前为止所做的:

var=1
CH=`ls | awk '/[0-9]{2}(?=_.*)/ {if (NR=$var) print $0}'`
echo $CH
文件夹名称类似于
01\u Startup
。但是回声是空白的。我想不出来。有人知道这在shell脚本中是否可行吗?我不太清楚|的顺序以及如何组合命令。谢谢

树:


等等。

awk
不支持
PCRE
,因此正向前瞻不起作用。另外,
bash
变量不能像这样被调用到
awk

我从您的需求中看到的可以通过
bash
内置字符串替换来满足

$ var=01_Startup
$ echo "${var%_*}"
01
find . -type d | while read -r dir; do echo "$dir ---> ${dir%_*}"; done
您可以使用
find
收集目录列表并使用字符串替换

$ var=01_Startup
$ echo "${var%_*}"
01
find . -type d | while read -r dir; do echo "$dir ---> ${dir%_*}"; done

awk
不支持
PCRE
,因此正向前瞻不起作用。另外,
bash
变量不能像这样被调用到
awk

我从您的需求中看到的可以通过
bash
内置字符串替换来满足

$ var=01_Startup
$ echo "${var%_*}"
01
find . -type d | while read -r dir; do echo "$dir ---> ${dir%_*}"; done
您可以使用
find
收集目录列表并使用字符串替换

$ var=01_Startup
$ echo "${var%_*}"
01
find . -type d | while read -r dir; do echo "$dir ---> ${dir%_*}"; done
像这样的

for c in Chapter_*; do
    v=${c#Chapter_}
    v=${v%%_*}
    echo chapter $c has number $v   # more chapter-processing code here
done
顺便说一句,是这样的吗

for c in Chapter_*; do
    v=${c#Chapter_}
    v=${v%%_*}
    echo chapter $c has number $v   # more chapter-processing code here
done

顺便说一句,.

使用awk尝试此查找命令:

find Chapter* -name "*.iso" -type f | awk -F'/' '{
   split($1, a, "_");
   system("mv " $0 " " $1 "/"  a[2] "_" $2)
}'

使用awk尝试此查找命令:

find Chapter* -name "*.iso" -type f | awk -F'/' '{
   split($1, a, "_");
   system("mv " $0 " " $1 "/"  a[2] "_" $2)
}'


嗯,我需要能够迭代地运行命令。我正在递归编译程序,所以我需要一个计数器,这样我就可以转到下一个子目录。我的设置方式:
buildall.sh
与其他8个文件夹一起位于主目录中。这8个文件夹中的每一个都有1-6个子文件夹,其中包含要编译的程序。我想从这些子文件夹中获取起始编号,并将其添加到其程序中。因此,子文件夹有编号,文件夹也有编号吗?你能做
树状主文件夹
并把输出放到你的问题中吗?有6000多个文件,所以输出对这里来说太大了。它对航站楼来说太大了!我已经在我的第一篇文章中列出了它的骨架。我只是想从最上面的目录(如Chapter_02_Startup)中获取数字。我意识到在我说我试图从最低的目录中获取数字之前,这是一个错误…@SeanHeiss谢谢你的编辑。因此,即使您从top directory中捕获了该号码,您打算如何使用它?还是这也是一个问题?:)我试图把这个数字放在
iso
文件的开头。现在我有了它,所以
iso
与它的文件夹同名(比如03_DEBUG),但我希望它像
02_03_DEBUG
。正如您所想象的,每个章节文件夹都从一个文件夹开始,因此当.iso都在一起时,它们会与其他文件夹中的文件夹混合在一起。所以我想在章节号前加上前缀,这样它们就可以很好地排序了。:)我知道我将如何准备它,我只是不知道如何得到它在第一位!嗯,我需要能够迭代地运行命令。我正在递归编译程序,所以我需要一个计数器,这样我就可以转到下一个子目录。我的设置方式:
buildall.sh
与其他8个文件夹一起位于主目录中。这8个文件夹中的每一个都有1-6个子文件夹,其中包含要编译的程序。我想从这些子文件夹中获取起始编号,并将其添加到其程序中。因此,子文件夹有编号,文件夹也有编号吗?你能做
树状主文件夹
并把输出放到你的问题中吗?有6000多个文件,所以输出对这里来说太大了。它对航站楼来说太大了!我已经在我的第一篇文章中列出了它的骨架。我只是想从最上面的目录(如Chapter_02_Startup)中获取数字。我意识到在我说我试图从最低的目录中获取数字之前,这是一个错误…@SeanHeiss谢谢你的编辑。因此,即使您从top directory中捕获了该号码,您打算如何使用它?还是这也是一个问题?:)我试图把这个数字放在
iso
文件的开头。现在我有了它,所以
iso
与它的文件夹同名(比如03_DEBUG),但我希望它像
02_03_DEBUG
。正如您所想象的,每个章节文件夹都从一个文件夹开始,因此当.iso都在一起时,它们会与其他文件夹中的文件夹混合在一起。所以我想在章节号前加上前缀,这样它们就可以很好地排序了。:)我知道我将如何准备它,我只是不知道如何得到它在第一位!问题是
文件夹名称看起来像01\u Startup
,但您的图片显示文件夹名称为
章节\u 02\u Startup
。哪一个是正确的?您还想为章节子文件夹中的所有文件放置prefx
02\uu
,还是只为
*\u DEBUG
文件放置prefx?@anubhava我在下面解释说我犯了一个错误,意思是说我想要文件夹
章节02\u启动
。我想为子文件夹中的每个
iso
文件添加前缀。.iso的名称类似于
01_Source_tree.iso
,以及
02_Console
等等。因此iso文件应该成为
03_01_Source_tree.iso
对吗?@anubhava No,
02_01_Source_tree.iso
,因为它的父文件夹是
Chapter\u 02\u Startup
。问题是
文件夹名称看起来像01\u Startup
,但您的图片显示文件夹名称为
Chapter\u 02\u Startup
。哪一个是正确的?您还想为章节子文件夹中的所有文件放置prefx
02\uu
,还是只为
*\u DEBUG
文件放置prefx?@anubhava我在下面解释说我犯了一个错误,意思是说我想要文件夹
章节02\u启动
。我想为子文件夹中的每个
iso
文件添加前缀。.iso的名称类似于
01\u Source\u tree.iso
,以及
02\u Console
等等