簡體   English   中英

在bash腳本中執行cut命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM