簡體   English   中英

如何刪除bash中字符后的所有文本?

[英]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
  1. 使用awk和管道:
$ echo $A | awk -v FS=':' '{print $1}'
user
  1. 通過bash 變量
$ echo ${A%%:*}
user
  1. 使用管道和sed
$ echo $A | sed 's#:.*##g'
user
  1. 使用管道和grep
$ echo $A | egrep -o '^[^:]+'
user
  1. 帶管道和切割
$ echo $A | cut -f1 -d\: 
user

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM