如何删除字符后的所有文本,在这种情况下,冒号(“:”),在bash?我能把结肠也切除吗?我不知道该怎么做。
当前回答
删除":"最后一个实例之后的所有内容
grep -o '^.*:' fileListingPathsAndFiles.txt
如果你想去掉最后一个":"
grep -o '^.*:' file.txt | sed 's/:$//'
@kp123:你想用/替换:(其中sed冒号应该是\/)
其他回答
egrep -o '^[^:]*:'
举个例子可能有用,但如果我理解正确的话,这是可行的:
echo "Hello: world" | cut -f1 -d":"
这将把Hello: world转换为Hello。
假设你有一个这样格式的文件路径:
/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
在其他一些情况下,最后一种情况也可能有用。注意,在最后一个输出的开头没有“/”。
删除":"最后一个实例之后的所有内容
grep -o '^.*:' fileListingPathsAndFiles.txt
如果你想去掉最后一个":"
grep -o '^.*:' file.txt | sed 's/:$//'
@kp123:你想用/替换:(其中sed冒号应该是\/)
$ echo 'hello:world:again' |sed 's/:.*//'
hello