[英]execute cut command inside bash script
回顯打印的每一行都包含給定文件所在目錄的正斜杠。我正在嘗試使用cut命令剪切正斜杠,但它不起作用。 這些文件已壓縮,因此具有.gz擴展名。
#!/bin/bash
for filename in /data/logs/2017/month_01/201701*
do
echo $filename
cut $filename -d '/' -f1
done
提前致謝。
命令順序錯誤。 您需要通過pipe( |
)或here-strings( <<<
)將輸入到cut
命令的字符串流式傳輸 。
echo "$filename" | cut -d '/' -f1
(要么)
cut -d '/' -f1 <<<"$filename"
(或)使用here-docs
cut -d '/' -f1 <<EOF
$filename
EOF
數據
並且不要忘記對變量加雙引號,以避免shell進行單詞拆分 。
假設文件名是/a/b/c.gz
您只需要c.gz
?
好吧,有兩個非常簡單的答案:
basename $filename
另一個是:
echo ${filename##*/}
后者利用bash
的內置字符串delete參數擴展。
解決問題的另一種方法是,您可以先更改目錄,即
#!/bin/bash
pushd /data/logs/2017/month_01
for filename in 201701*
do
echo $filename
done
popd
參考:
(編輯:固定錯字由@ 123標識)
如建議的b @lnian cut命令與通過管道符號的echo命令一起使用要僅使用腳本獲取文件名,您需要使用。
用-f1選項剪切將在/之前獲得第一個值,該值將為空白,因此您需要從文件名中獲取最后一個值。
#!/bin/bash
for filename in /data/logs/2017/month_01/201701*
do
echo "$filename" | rev| cut -d '/' -f1
done
rev命令反轉文件名,這樣您將獲得最后一個值,即您的文件名
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.