[英]How can I remove all text after a character in bash?
如何在 bash 中刪除字符后的所有文本,在本例中為冒號(“:”)? 我也可以去掉結腸嗎? 我不知道該怎么做。
在 Bash(以及 ksh、zsh、dash 等)中,您可以使用參數擴展,其中%
將從字符串末尾刪除字符,或者#
將從字符串開頭刪除字符。 如果您只使用這些字符中的一個,那么最小的匹配字符串將被刪除。 如果將字符加倍,最長的將被刪除。
$ a='hello:world'
$ b=${a%:*}
$ echo "$b"
hello
$ a='hello:world:of:tomorrow'
$ echo "${a%:*}"
hello:world:of
$ echo "${a%%:*}"
hello
$ echo "${a#*:}"
world:of:tomorrow
$ echo "${a##*:}"
tomorrow
一個例子可能很有用,但如果我理解正確,這將起作用:
echo "Hello: world" | cut -f1 -d":"
這會將Hello: world
轉換為Hello
。
$ echo 'hello:world:again' |sed 's/:.*//'
hello
egrep -o '^[^:]*:'
假設您有一個包含以下格式文件的路徑:
/dirA/dirB/dirC/filename.file
現在您只需要包含四個“/”的路徑。 類型
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d"/"
你的輸出將是
/dirA/dirB/dirC
使用 cut 的好處是你還可以剪切最上層目錄以及文件(在這個例子中),所以如果你輸入
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-3 -d"/"
你的輸出將是
/dirA/dirB
雖然你可以從字符串的另一邊做同樣的事情,但在這種情況下它沒有輸入那么有意義
$ echo "/dirA/dirB/dirC/filename.file" | cut -f2-4 -d"/"
結果是
dirA/dirB/dirC
在其他一些情況下,最后一種情況也可能有幫助。 請注意,最后一個輸出的開頭沒有“/”。
在“:”的最后一個實例之后修剪所有內容
cat fileListingPathsAndFiles.txt | grep -o '^.*:'
如果你想刪除最后一個“:”
cat file.txt | grep -o '^.*:' | sed 's/:$//'
@kp123:你想用/
替換:
(其中 sed 冒號應該是\\/
)
我知道一些解決方案:
# Our mock data:
A=user:mail:password
$ echo $A | awk -v FS=':' '{print $1}'
user
$ echo ${A%%:*}
user
$ echo $A | sed 's#:.*##g'
user
$ echo $A | egrep -o '^[^:]+'
user
$ echo $A | cut -f1 -d\:
user
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.