2017-05-08 71 views
2

我試圖改變一個重複的字符序列轉換爲數字。無論如何要忽略大小寫。忽略大小寫敏感在bash修剪

我試圖用改變全部小寫爲大寫。

trim doc

echo "AAAAAAAAAABBBBBBBBBCcCCCCCcCC" | tr c C | tr -s "ABC" "123" 
>123 

有沒有更好的方式來忽略大小寫。

+0

您可以使用:'tr -s'[:lower:]''[:upper:]'<<<「AAAAAAAAAABBBBBBBBBCcCCCCCcCC」| TR「ABC」,「123」' – anubhava

回答

1

如果您有機會獲得GNU Awk你可以用它IGNORECASE功能這一點。

echo "AAAAAAAAAABBBBBBBBBCcCCCCCcCC" | awk 'BEGIN{IGNORECASE=1}{gsub(/[A]+/,"1") ;gsub(/[B]+/,"2"); gsub(/[C]+/,"3")}1' 
123 

man頁面引用,

[..]另一個具體到gawk的方法,是將可變IGNORECASE設置爲非零值(參見內置變量)。當IGNORECASE不爲零時,所有正則表達式和字符串操作都會忽略大小寫。

更改的IGNORECASE值動態地控制程序的情況下的靈敏度,因爲它運行。因爲IGNORECASE(最喜歡的變量)被初始化爲零的情況下是默認顯著[..]

+0

你實際上需要3調用'gsub'到每個字母音譯爲相應的數字,否則'AAAAAAAAAABBBBBBBBBCcCCCCCcCCaa'也將被轉換爲'123',而不是'1231' – anubhava

+1

@anubhava:你是對的;), 修復!謝謝! – Inian

+0

這很好++,但是'/ [C] + /'可以更好地寫作'/ C + /' – anubhava

1

使用GNU sed中,你可以做到這一點與忽略大小寫標誌:

str='AAAAAAAAAABBBBBBBBBCcCCCCCcCC' 

sed -E 's/a+/1/Ig; s/b+/2/Ig; s/c+/3/Ig' <<< "$str" 
123 

或者使用tr

tr -s '[:lower:]' '[:upper:]' <<< "$str" | tr "ABC" "123" 
123