Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在bash中小写和替换空格?_Regex_Bash_Perl_Sed - Fatal编程技术网

Regex 如何在bash中小写和替换空格?

Regex 如何在bash中小写和替换空格?,regex,bash,perl,sed,Regex,Bash,Perl,Sed,在PHP中: 如何在BASH脚本中执行相同的操作?php在BASH中 $output = preg_replace("/[^a-z]/","_",strtolower($input)); 您是否正在寻找模式替换(${parameter/Pattern/string})和大小写修改(${parameter,Pattern})?如果是这样,您将在参数扩展主题下找到更多信息 $ php -r "echo preg_replace(""/[^a-z]/"",""_"",strtolower($argv

在PHP中:

如何在BASH脚本中执行相同的操作?

php在BASH中

$output = preg_replace("/[^a-z]/","_",strtolower($input));

您是否正在寻找模式替换(
${parameter/Pattern/string}
)和大小写修改(
${parameter,Pattern}
)?如果是这样,您将在参数扩展主题下找到更多信息

$ php -r "echo preg_replace(""/[^a-z]/"",""_"",strtolower($argv[1]));" A1B2C
a_b_c
但是需要注意的是,BASH版本使用模式而不是正则表达式。例如,模式
*
类似于正则表达式
*
。模式

需要bash4(用4.3.48测试)

假设在变量
输出
的值中不需要大写字符,我建议如下:

$ a="FOO BAR BLUB"
$ tmp=${a// /_}
$ echo ${tmp,,}
foo_bar_blub
  • typeset-l输出
    :将变量定义为仅小写。从
    manbash

    为变量赋值时,所有大写字符都将转换为小写

  • output=${input//}
    :用下划线替换所有空格

顺便说一句:还有
typeset-u variable
将其定义为“全大写”。 请参见
manbash


更新:再次访问时,我意识到我的答案与问题标题匹配,但与PHP代码不匹配。在PHP示例中,所有
a-z
的字符都替换为下划线。因此,如果
input
包含冒号或逗号,则它们也将替换为下划线

下面是与以下内容匹配的代码:

typeset -l output
output=${input// /_}
最后,引用@micha wiedenmann的答案:

但是需要注意的是,BASH版本使用模式而不是正则表达式。例如,模式
*
类似于正则表达式
*
。模式

检查手册页并搜索“模式匹配”。

此功能:

typeset -l output
output=${input//[^a-z]/_}
$input
只是bash脚本中定义的一个变量


或者,它也可以在bash4+之后运行。

我认为您可以在控制台模式下运行PHP,从STDIN获取输入并打印到stdout。或者,使用Perl:
Perl-wple'$\uLc$\uU=~s/[^a-z]/\ug'
这不起作用:$output=$input>>php-r preg\u replace(“/[^a-z]/”、“\uz”、strtolower(fgets(STDIN));您希望您的代码片段做什么?它根本不是有效的shell语法。也许你的问题是如何将STDIN上的输入从shell发送到程序?问题似乎是:实现相同效果的等效命令是什么。我觉得这个方法非常合适,我很惊讶所有的混乱都来自哪里。请在bash中包含$input和$output变量line@simpatico您将真正需要了解shell是如何工作的。没有“输入变量”和“输出变量”。您需要将这些值通过管道传输到被调用的程序中。你需要学习shell编程,但这个网站并不是教你如何编程。或者:我以前学过shell的工作原理,写过几个bash脚本,但是我的知识有一个缺口,我在此谦虚地问一下。感谢那些知道答案的人。谢谢你教我有关
排版-l
!在bash-3.2中,我得到了“typeset:-l:invalid option”,而在manbash中,选项只有-a、-f、-I、-r、-t和-xUpgrading到bash-4.4 itworks@simpatico更新到bash4.*是个好主意。这里的大多数人都认为我们在回答问题时会谈论bash4。顺便说一句:Bash5几天前发布,但我会等待更新到那个版本。@user7369280,macos最新的默认版本仍然是bash-3.2。macports上的最新版本是4.4,要使用它,脚本必须以#开头/usr/bin/env bashMicha,我在回答中引用了你的最后一句话。
output=`php -r "echo preg_replace("/[^a-z]/","_",strtolower($input));"`
echo $output