次のファイルのリストがあります。
[root@ods1 backup]# ls -l
total 93892810
-rw-r----- 1 root root 651248 Feb 17 08:34 abc_def_g_17-02-2022.sql
-rw------- 1 root root 665248 Mar 23 08:46 bbc_23-03-2022.sql
-rw-r----- 1 root root 676992 Apr 04 16:52 zz_b_04-04-2022.sql
私が達成しなければならないことは次のとおりです。
abc_def_g
bbc
zz_b
私は成功せずにこれを試しました。
ls -l | awk '{print $9}' | cut -d '_' -f1-2
この目標をどのように達成できますか?最後の行まで一連のコマンドを取得します。_キャラクターは職業に依存しなければなりません。
編集:このコマンドはCentOS 8で実行されます。
ベストアンサー1
到着解析されないls
loop
、シンプルで構文を使用できますshell
。
for f in *; do echo "${f%_*}"; done
リストをさらに処理する必要がある場合(および配列で作業できるシェルがある場合)、項目を配列に追加できます。
tokens=()
for f in *; do tokens=("${tokens[@]}" "${f%_*}"); done
echo "${tokens[@]}"
あるいは、ループを使わずに配列を直接宣言します。
files=(*)
tokens=("${files[@]%_*}")
#or
for token in "${files[@]%_*}"; do echo "$token"; done