2016-11-22 59 views
2

提取字符串我有一個文件名如何從文本中殼

"PHOTOS_TIMESTAMP_5373382" 

我想從這個文件名"PHOTOS_5373382"提取和添加"ABC"即最後希望它看起來像

"abc_PHOTOS_5373382"在shell腳本。

+0

'MV PHOTOS_TIMESTAMP_5373382 abc_PHOTOS_5373382'?或者你是否想說「TIMESTAMP」和「ABC」是通用文本的佔位符? –

+0

嘗試查看'cut'命令 –

+0

'sed'是你的朋友 – GMichael

回答

4

echo "PHOTOS_TIMESTAMP_5373382" | awk -F"_" '{print "ABC_"$1"_"$3}'

echo將爲awk命令提供輸入。

awk命令使用選項-F對輸入字符'_'執行數據標記。

單個令牌(從1開始)可以使用$n訪問,其中n是令牌編號。

1

你將需要下面的命令序列直接在殼,優選bash殼(或)作爲一個完整的腳本,其採用單個參數的文件被轉換

#!/bin/bash 

myFile="$1"           # Input argument (file-name with extension) 
filename=$(basename "$myFile")       # Getting the absolute file-path 
extension="${filename##*.}"       # Extracting the file-name part without extension 
filename="${filename%.*}"        # Extracting the extension part 
IFS="_" read -r string1 string2 string3 <<<"$filename" # Extracting the sub-string needed from the original file-name with '_' de-limiter 
mv -v "$myFile" ABC_"$string1"_"$string3"."$extension" # Renaming the actual file 

在運行腳本

$ ./script.sh PHOTOS_TIMESTAMP_5373382.jpg 
`PHOTOS_TIMESTAMP_5373382.jpg' -> `ABC_PHOTOS_5373382.jpg' 
0

雖然我很喜歡AWK

本地殼溶液

k="PHOTOS_TIMESTAMP_5373382" 
IFS="_" read -a arr <<< "$k" 
echo abc_${arr[0]}_${arr[2]} 

桑達解決方案

echo "abc_$k" | sed -e 's/TIMESTAMP_//g' 
abc_PHOTOS_5373382