我想從線路捕捉特殊字符:捕捉特殊字符從線
var=`echo "#this is comment" | grep "[^a-zA-Z0-9 \t]"`
echo $var
預期輸出:#
但要:#this is comment
有人能幫助我。
我想從線路捕捉特殊字符:捕捉特殊字符從線
var=`echo "#this is comment" | grep "[^a-zA-Z0-9 \t]"`
echo $var
預期輸出:#
但要:#this is comment
有人能幫助我。
好像你想要更多的東西一樣:
var=`echo "#this is comment" | sed 's/[^a-zA-Z0-9 \t]//g;'`
使用sed
將替代字符;使用grep
只搜索字符。
編輯:請注意,\t
結構不能保證可移植到所有的系統或區域;我相信如果您的sed
支持POSIX正則表達式,則使用[:space:]
可能會更好。 (謝謝@ ghoti!)
string="#this is comment"
var=$(echo "$string" | sed 's/[a-zA-Z0-9 ]//g')
echo "$var"
我刪除了\t
,因爲它不便攜。
如果你想使用awk要做到這一點,因爲你的標籤意味着,你可以使用類似:
var=$(echo "$string" | awk '{gsub(/[a-zA-Z0-9 ]/, "")} 1')
注意,這些都可能不好的方法來實現什麼,那就是你試圖去做。如果您發佈更多代碼,向我們展示一些背景信息,我們可以幫助您避免使用XY problem。
當然,如果你願意,你也可以直接在bash中做這樣的替換。
var=${string//[A-Za-z0-9 ]}
你會避免調用額外的程序時,你並不真的需要它節省CPU和時間。
感謝您的解決方案。 – phani 2012-08-16 04:10:21
sed
可用於這一點,但tr
是一個更好的選擇:
echo "#this is comment" | tr -d 'a-zA-Z0-9 \t'
tr
還支持字符類,如[:space:]
和[:alpha:]
的'\ t'是不可移植,而被忽略在OSX,BSD,Solaris,HPUX等。OP沒有提到他的平臺。如果您想要包含標籤,請使用便攜式設備,或指定答案的限制。 – ghoti 2012-08-16 01:46:09
好的,謝謝@ ghoti!我添加了關於限制的評論... – 2012-08-16 01:53:41
'var ='echo「#this is comment」| | sed's/[a-zA-Z0-9 \ t] // g;'''很有魅力,感謝您的快速響應,您節省了我的時間。 – phani 2012-08-16 04:09:27