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,在冒号前提取字符串的主要内容,如果未能解决你的问题,请参考以下文章