bash,在冒号前提取字符串

Posted

技术标签:

【中文标题】bash,在冒号前提取字符串【英文标题】:bash, extract string before a colon 【发布时间】:2013-12-19 07:55:03 【问题描述】:

如果我有一个包含这样行的文件

/some/random/file.csv:some string
/some/random/file2.csv:some string2

有没有办法得到一个只有冒号前第一部分的文件,例如

/some/random/file.csv
/some/random/file2.csv

我宁愿只使用 bash 一个衬里,但 perl 或 python 也可以。

【问题讨论】:

【参考方案1】:

这对我有用,你们可以试试

INPUT='ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash'
SUBSTRING=$(echo $INPUT| cut -d: -f1)
echo $SUBSTRING

【讨论】:

【参考方案2】:

另一种纯 BASH 方式:

> s='/some/random/file.csv:some string'
> echo "$s%%:*"
/some/random/file.csv

【讨论】:

如果变量中有多个冒号,这将无法按预期工作,因为它会在最后一次出现而不是预期的第一次出现...使用 $s%% :* 改为 没错%% 更适合。现在正在编辑。 对我来说可以一次只从单词列表中删除想要的信息,格式为 [info]_mapping.json。 echo "$s%%_mapping.json"【参考方案3】:

另一个纯 Bash 解决方案:

while IFS=':' read a b ; do
  echo "$a"
done < "$infile" > "$outfile"

【讨论】:

+1(稍作修改);这是从bash 中的文件中读取分隔文本的标准方法。【参考方案4】:

这个问题被问了很多次,以至于一个超过 1000 点的用户问这个有点奇怪 但只是为了展示另一种方法:

echo "/some/random/file.csv:some string" | awk 'sub(/:.*/,x)1'
/some/random/file.csv

【讨论】:

【参考方案5】:

在纯 bash 中试试这个:

FRED="/some/random/file.csv:some string"
a=$FRED%:*
echo $a

Here 是一些有帮助的文档。

【讨论】:

非常感谢的答案 请注意,单个% 仅提取到第一个冒号;使用%% 提取到最后一个冒号。 其实恰恰相反:%% 提取到第一个,% 提取到最后。【参考方案6】:
cut -d: -f1

awk -F: 'print $1'

sed 's/:.*//'

【讨论】:

这正是我只需要列出在 git diff 中以特定模式开始更改的文件夹的名称 大声笑,我是个忘记 cut 的白痴,只花了 10 分钟尝试做这个正则表达式,然后当我读到你的答案时,我真的是面对面,谢谢。

以上是关于bash,在冒号前提取字符串的主要内容,如果未能解决你的问题,请参考以下文章

shell编程之内置字符串处理工具

shell脚本编程之内置字符串处理工具

python-列表,元组

python学习笔记--list和元组

在 bash 中使用 :- (冒号破折号)

如何 scp 文件名中带有冒号的文件?