Shell 仅提取文件名的脚本
Shell Script to extract only file name
我有这样的文件格式 (publishfile.txt)
drwxrwx---+ h655201 supergroup 0 2019-04-24 09:16 /data/xyz/invisible/se/raw_data/OMEGA
drwxrwx---+ h655201 supergroup 0 2019-04-24 09:16 /data/xyz/invisible/se/raw_data/sample
drwxrwx---+ h655201 supergroup 0 2019-04-24 09:16 /data/xyz/invisible/se/raw_data/sample(1)
我只想提取名字OMEGA****,sample,sample(1)如何
我可以这样做吗?我在我的代码中使用了 basename,但它在 for 循环中不起作用。这是我的示例代码
for line in $(cat $BASE_PATH/publishfile.txt)
do
FILE_PATH=$(echo "line"| awk '{print $NF}' )
done
FILE_NAME=($basename $FILEPATH)
但是这段代码在 for 循环之外使用时也不起作用
试试这个:
cat $BASE_PATH/publishfile.txt | awk '{print }' | sed 's/.*\///'
输出将是:
OMEGA
sample
sample(1)
更新:我想 cat x.txt | sed 's/.*\///'
仍然有效,如果您的所有文件、文件夹至少包含 1 个斜杠 (/
)。
你上面的代码有错别字。您的代码如下:
FILE_NAME=($basename $FILEPATH)
但应该是
FILE_NAME=$(basename $FILEPATH)
这应该在循环内或循环外都能正常工作
awk -F / '{ print $NF }' "$BASE_PATH"/publishfile.txt
这只是说定界符是斜杠,我们想要每行的最后一个字段。
你基本上不应该 运行 Awk 在 shell while read
循环中的每个输入行上(更不用说 a for
loop);Awk 本身默认这样做,速度要快得多比 shell.
更好
我有这样的文件格式 (publishfile.txt)
drwxrwx---+ h655201 supergroup 0 2019-04-24 09:16 /data/xyz/invisible/se/raw_data/OMEGA
drwxrwx---+ h655201 supergroup 0 2019-04-24 09:16 /data/xyz/invisible/se/raw_data/sample
drwxrwx---+ h655201 supergroup 0 2019-04-24 09:16 /data/xyz/invisible/se/raw_data/sample(1)
我只想提取名字OMEGA****,sample,sample(1)如何 我可以这样做吗?我在我的代码中使用了 basename,但它在 for 循环中不起作用。这是我的示例代码
for line in $(cat $BASE_PATH/publishfile.txt)
do
FILE_PATH=$(echo "line"| awk '{print $NF}' )
done
FILE_NAME=($basename $FILEPATH)
但是这段代码在 for 循环之外使用时也不起作用
试试这个:
cat $BASE_PATH/publishfile.txt | awk '{print }' | sed 's/.*\///'
输出将是:
OMEGA
sample
sample(1)
更新:我想 cat x.txt | sed 's/.*\///'
仍然有效,如果您的所有文件、文件夹至少包含 1 个斜杠 (/
)。
你上面的代码有错别字。您的代码如下:
FILE_NAME=($basename $FILEPATH)
但应该是
FILE_NAME=$(basename $FILEPATH)
这应该在循环内或循环外都能正常工作
awk -F / '{ print $NF }' "$BASE_PATH"/publishfile.txt
这只是说定界符是斜杠,我们想要每行的最后一个字段。
你基本上不应该 运行 Awk 在 shell while read
循环中的每个输入行上(更不用说 a for
loop);Awk 本身默认这样做,速度要快得多比 shell.