在 Unix shell(使用正则表达式)上提取子字符串的最简单方法是什么?
简单的意思:
更新
我意识到正则表达式本身与简单性相冲突,因此我选择了最简单的一种cut作为所选答案。我很抱歉含糊不清的问题。我更改了标题以更准确地表示此 QA 的当前状态。
dav*_*vey 18
cut 可能有用:
$ echo hello | cut -c1,3
hl
$ echo hello | cut -c1-3
hel
$ echo hello | cut -c1-4
hell
$ echo hello | cut -c4-5
lo
Run Code Online (Sandbox Code Playgroud)
Shell 内置程序对此也有好处,这是一个示例脚本:
#!/bin/bash
# Demonstrates shells built in ability to split stuff. Saves on
# using sed and awk in shell scripts. Can help performance.
shopt -o nounset
declare -rx FILENAME=payroll_2007-06-12.txt
# Splits
declare -rx NAME_PORTION=${FILENAME%.*} # Left of .
declare -rx EXTENSION=${FILENAME#*.} # Right of .
declare -rx NAME=${NAME_PORTION%_*} # Left of _
declare -rx DATE=${NAME_PORTION#*_} # Right of _
declare -rx YEAR_MONTH=${DATE%-*} # Left of _
declare -rx YEAR=${YEAR_MONTH%-*} # Left of _
declare -rx MONTH=${YEAR_MONTH#*-} # Left of _
declare -rx DAY=${DATE##*-} # Left of _
clear
echo " Variable: (${FILENAME})"
echo " Filename: (${NAME_PORTION})"
echo " Extension: (${EXTENSION})"
echo " Name: (${NAME})"
echo " Date: (${DATE})"
echo "Year/Month: (${YEAR_MONTH})"
echo " Year: (${YEAR})"
echo " Month: (${MONTH})"
echo " Day: (${DAY})"
Run Code Online (Sandbox Code Playgroud)
输出:
Variable: (payroll_2007-06-12.txt)
Filename: (payroll_2007-06-12)
Extension: (txt)
Name: (payroll)
Date: (2007-06-12)
Year/Month: (2007-06)
Year: (2007)
Month: (06)
Day: (12)
Run Code Online (Sandbox Code Playgroud)
根据上面的 Gnudif,当事情变得非常艰难时,总会有 sed/awk/perl。
| 归档时间: |
|
| 查看次数: |
139187 次 |
| 最近记录: |