2012-07-24 22 views
2

請有人可以讓我知道我怎麼會變成這樣:解析開始和結束日期與sed的

part1-part2-part3-2012-07-23-2012-07-23.csv 

成這樣:

part1-part2-part3.csv 

part1-part2-part3是另一個字符串替換,所以不應該不被視爲常量。

我認爲sed可能是這項工作的最佳工具,雖然我可以及時解決這個問題,但我的工作時間很緊。

任何幫助真的很感激。

+0

我已經與這一個@codaddict,但是感謝大家的輸入 - 真正的讚賞。 – peterRepeater 2012-07-24 12:37:35

回答

1
$ echo 'part1-part2-part3-2012-07-23-2012-07-23.csv' | \ 
    sed -re 's/^(.*)(-[0-9]+){6}(.*)$/\1\3/' 
part1-part2-part3.csv 
+0

這完成了這項工作,謝謝。 – peterRepeater 2012-07-24 11:31:00

0

這個sed命令可以完成這項工作。它匹配一個日期,並將其用作第二組比賽的第一組,因爲它們是相同的。

sed -e 's/\(-[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)\1\(\.csv\)$/\2/' 
0
$ echo part1-part2-part3-2012-07-23-2012-07-23.csv | sed 's/-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]//' 
part1-part2-part3.csv 

另外,如果你知道你需要從-2012刪除所有字符行的末尾 你可以做簡單:

$ echo part1-part2-part3-2012-07-23-2012-07-23.csv | sed 's/-2012.*/.csv/' 
0

輸入。 txt

part1-part2-part3-2012-07-23-2012-07-23.csv 

代碼

$> SED的/ [0-9] [0-9] // G'INPUT.TXT | SED的/ --- * // G'

輸出

part1-part2-part3.csv 
0

cut在這種情況下比sed一個利特勒簡單:

fname=part1-part2-part3-2012-07-23-2012-07-23.csv 
new_fname="$(echo $fname | cut -d- -f1-3).csv" 
0


$ echo part1-part2-part3-2012-07-23-2012-07-23.csv | 
> awk -F '-' '{ print $1"-"$2"-"$3".csv" }' 
part1-part2-part3.csv 
相關問題