我有一个字符串数组,称为names
包含名称和一些后续垃圾数据。像这样
Jill Shortz, City Contractor, America
Bill Torts, Family Doctor, Canada
Will Courtz, Folk DJ, Bulgaria
Phil-Lip Warts, Juggler, India
我想通过names
使用正则表达式仅提取前两个单词(^\w+-*( *\w+)*)
并将它们覆盖回进行迭代,names
以便包含
Jill Shortz
Bill Torts
Will Courtz
Phil-Lip Warts
这就是我尝试的方式,但我的 AIX 机器不喜欢-P
在 Perl 模式下执行的参数
for((i=0;i<${#names[@]};++i)); do
names[$i]=`grep -P '(^\w+-*( *\w+)*)' -o <<<"${names[i]}"`
done
假设您只想删除第一个逗号后的所有内容,我根本看不到使用正则表达式来完成此任务。
这是从每个数组元素中单独删除第一个逗号和它之后的所有内容(字面意思是“匹配通配符模式的最长后缀
,*
”)。然后将生成的修改名称列表重新分配给names
数组(并用 打印printf
)。鉴于您将数组初始化为问题中的列表,该代码将生成
(双引号由
printf
格式字符串添加)。该代码将与
ksh93
、bash
、zsh
和一起使用yash
。我在 ksh 手册页中看不到任何地方可以将字符串与正则表达式匹配,并使用捕获括号来提取子字符串(就像你在 bash 中所做的那样
但是,您可以在全局模式中使用扩展正则表达式 with
~(E:regex)
,因此您可以这样做:...以及最大程度的只写不可读性