Bash shell 想要寫類似 trim() 做前後移除某個符號等動作,要怎麼做呢?
Bash shell 使用 sed 做 trim 的動作
使用 sed 就可以達成,不過很常會使用到,把他包成 shell function 來使用,該怎麼寫呢?
使用 sed 移除字串的前後多個空白
- 挑其一即可
- echo ' """abc" "" ' | sed -e 's/^[[:space:]]//' -e 's/[[:space:]]$//'
- echo ' """abc" "" ' | sed -e 's/^ *//' -e 's/ *$//'
"""abc" ""
使用 sed 移除字串的前後 " (單個 ")
- echo '"""abc" ""' | sed -e 's/^"//' -e 's/"$//' ""abc" "
使用 sed 移除字串的前後多個空白 和 單個 "
- echo ' """abc" "" ' | sed -e 's/^ *//' -e 's/ *$//' -e 's/^"//' -e 's/"$//'
""abc" "
Shell function trim()
將上述寫成 Bash shell function trim()
- vim .bashrc
function trim() { if [ -z $1 ]; then # $1 is unset sed -e 's/^ *//' -e 's/ *$//' else # echo "=== $1 ===" sed -e 's/^ *//' -e 's/ *$//' -e "s/^$1//" -e "s/$1$//" fi }
- source .bashrc # 讓 function trim 可以開始使用,下述為使用範例
- echo ' """abc" "" ' | trim # 預設移除前後多個空白 """abc" ""
- echo ' """abc" "" ' | trim '"' # 移除 "
""abc" " - echo ' aa"""abc" ""a ' | trim a # 移除 a
a"""abc" "" - echo ' aa"""abc" ""a ' | trim "a" # 移除 a
a"""abc" ""