如何删除字符后的所有文本,在这种情况下,冒号(“:”),在bash?我能把结肠也切除吗?我不知道该怎么做。
当前回答
egrep -o '^[^:]*:'
其他回答
删除":"最后一个实例之后的所有内容
grep -o '^.*:' fileListingPathsAndFiles.txt
如果你想去掉最后一个":"
grep -o '^.*:' file.txt | sed 's/:$//'
@kp123:你想用/替换:(其中sed冒号应该是\/)
$ echo 'hello:world:again' |sed 's/:.*//'
hello
我知道一些解决办法:
# Our mock data:
A=user:mail:password
使用awk和pipe:
$ echo $A | awk -v FS=':' '{print $1}'
user
通过bash变量:
$ echo ${A%%:*}
user
带管和sed:
$ echo $A | sed 's#:.*##g'
user
使用pipe和grep:
$ echo $A | egrep -o '^[^:]+'
user
带管切:
$ echo $A | cut -f1 -d\:
user
在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
假设你有一个这样格式的文件路径:
/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
在其他一些情况下,最后一种情况也可能有用。注意,在最后一个输出的开头没有“/”。
推荐文章
- 如何在bash中删除字符后的所有文本?
- 如何配置git bash命令行补全?
- /bin/sh: apt-get:未找到
- 如何检索给定相对的绝对路径
- 图形化对?
- 我如何能匹配一个字符串与正则表达式在Bash?
- 为什么cURL返回错误“(23)Failed writing body”?
- 在bash脚本中否定if条件
- 如何撤消“set -e”使bash立即退出,如果任何命令失败?
- 如何在docker映像的新容器中运行bash ?
- 管道命令输出到tee,但也保存退出代码的命令
- 如何自动添加用户帐户和密码与Bash脚本?
- 如何在bash脚本中检查文件名的扩展名?
- 使用bash的变量中第一个大写字符
- 我如何才能快速和所有的数字在一个文件?