regex - UNIX 中的子字符串

标签 regex unix

假设我有一个字符串“123456789”。

我想提取第 3 个、第 6 个和第 8 个元素。我想我可以用

cut -3, -6, -8

但如果这给
368

假设我想用空格将它们分开以获得
3 6 8

我该怎么办?

最佳答案

实际上,shell 参数扩展允许您直接进行子字符串切片,因此您可以这样做:

x='123456789'
echo "${x:3:1}" "${x:6:1}" "${x:8:1}"

更新

要对整个文件执行此操作,请循环读取该行:
while read x; do
  echo "${x:3:1}" "${x:6:1}" "${x:8:1}"
done < file

(顺便说一下,bash 切片是零索引的,所以如果你想要数字 '3'、'6' 和 '8',你真的需要 ${x:2:1} ${x:5:1} and {$x:7:1} 。)

关于regex - UNIX 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19171993/

相关文章:

java - 为什么 java 中的 String.replaceAll() 需要正则表达式中的 4 个斜杠 "\\\\"才能实际替换 "\"?

javascript - 以逗号作为百位分隔符打印数字

php - 如何匹配字符串中的所有内容,直到第二次出现带有正则表达式的定界符?

unix - lsof 的非零退出代码

c++ - gprof 报告没有累积时间

regex - 将数学表达式与正则表达式匹配?

python - 如何在 python 中使用正则表达式 'skip' 特定单词?

php - 将一个非常大的文件解析到mysql中

java - UNIX 设置扩展属性 setxattr

linux - Microsoft Word 文件中有图像时会损坏,通过 unix 的 sendmail 库发送