如何在bash中删除字符后面的所有文本,在本例中为冒号(“:”)?我也可以取出结肠吗?我不知道怎么做。
答案 0 :(得分:215)
在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
答案 1 :(得分:114)
一个例子可能有用,但如果我理解正确,这将有效:
echo "Hello: world" | cut -f1 -d":"
这会将“hello:world”转换为“hello”。
答案 2 :(得分:5)
$ echo 'hello:world:again' |sed 's/:.*//'
hello
答案 3 :(得分:4)
egrep -o '^[^:]*:'
答案 4 :(得分:2)
假设您有一个包含此格式文件的路径:
/dirA/dirB/dirC/filename.file
现在你只需要包含四个“/”的路径。型
$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d"/"
,您的输出将是
/dirA/dirB/dirC
使用剪切的优点是你还可以剪切最上面的目录以及文件(在本例中),所以如果你输入
$ 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
在其他一些情况下,最后一种情况也可能有所帮助。请注意,在最后一个输出的开头没有“/”。
答案 5 :(得分:-1)
删除“:”最后一个实例之后的所有内容
cat fileListingPathsAndFiles.txt | grep -o '^.*:'
,如果您想删除最后一个“:”
cat file.txt | grep -o '^.*:' | sed 's/:$//'
@ kp123:您想将:
替换为/
(sed冒号应为\/
)