AWK 使用的替代方案
Alternative for AWK use
我希望有一个更优雅的文件批量重命名解决方案,如下所示。文件的格式为 DEV_XYZ_TIMESTAMP.dat
,我们需要它们为 T-XYZ-TIMESTAMP.dat
。
最后,我将它们全部复制(在同一侧)到 renamed
文件夹中:
ls -l *dat|awk '{system("cp " " renamed/T-" substr(, index(, "_")+1))}'
所以,首先我列出了所有 dat 文件,然后选择第 10 列(文件名)并使用 awk 的 system 函数执行命令。
该命令实质上是将原始文件名复制到具有新文件名的 renamed 文件夹中。
通过在(包括)_ 之前删除(awk substring 函数)前缀并添加 "T-" 前缀来创建新文件名。
有效:
cp DEV_file.dat renamed/T-file.dat
有没有办法将 cp
或 mv
与一些正则表达式规则一起使用,以更优雅的方式实现相同的目的?
感谢
您可以使用这个脚本:
for file in *.dat; do
f="${file//_/-}"
mv "$file" renamed/T-"${f#*-}"
done
我会这样做:
cpdir=renamed
for file in *dat; do
newfile=$(echo "$file" | sed -e "s/[^_]*/T/" -e "y/_/-/")
cp "$file" "$cpdir/$newfile"
done
sed
脚本转换单个 T 中的每个非下划线前导字符,然后将每个 _
替换为 -
。如果在执行前不确定cpdir
是否存在,您可以在第一行后简单地添加mkdir "$cpdir"
。
如果你有 rename
实用程序
rename -E "s/[^_]*/T/" -e "s/_/-/g" *dat
演示
$ls -1
ABC_DEF_TIMESTAMP.dat
DEV_XYZ_TIMESTAMP.dat
$rename -E "s/[^_]*/T/" -e "s/_/-/g" *
$ls -1
T-DEF-TIMESTAMP.dat
T-XYZ-TIMESTAMP.dat
$
我希望有一个更优雅的文件批量重命名解决方案,如下所示。文件的格式为 DEV_XYZ_TIMESTAMP.dat
,我们需要它们为 T-XYZ-TIMESTAMP.dat
。
最后,我将它们全部复制(在同一侧)到 renamed
文件夹中:
ls -l *dat|awk '{system("cp " " renamed/T-" substr(, index(, "_")+1))}'
所以,首先我列出了所有 dat 文件,然后选择第 10 列(文件名)并使用 awk 的 system 函数执行命令。 该命令实质上是将原始文件名复制到具有新文件名的 renamed 文件夹中。 通过在(包括)_ 之前删除(awk substring 函数)前缀并添加 "T-" 前缀来创建新文件名。
有效:
cp DEV_file.dat renamed/T-file.dat
有没有办法将 cp
或 mv
与一些正则表达式规则一起使用,以更优雅的方式实现相同的目的?
感谢
您可以使用这个脚本:
for file in *.dat; do
f="${file//_/-}"
mv "$file" renamed/T-"${f#*-}"
done
我会这样做:
cpdir=renamed
for file in *dat; do
newfile=$(echo "$file" | sed -e "s/[^_]*/T/" -e "y/_/-/")
cp "$file" "$cpdir/$newfile"
done
sed
脚本转换单个 T 中的每个非下划线前导字符,然后将每个 _
替换为 -
。如果在执行前不确定cpdir
是否存在,您可以在第一行后简单地添加mkdir "$cpdir"
。
如果你有 rename
实用程序
rename -E "s/[^_]*/T/" -e "s/_/-/g" *dat
演示
$ls -1
ABC_DEF_TIMESTAMP.dat
DEV_XYZ_TIMESTAMP.dat
$rename -E "s/[^_]*/T/" -e "s/_/-/g" *
$ls -1
T-DEF-TIMESTAMP.dat
T-XYZ-TIMESTAMP.dat
$