Unix 需要从行中提取特定文本
我需要从下面提到的行中提取特定变量,我尝试使用sed提取变量,但我不确定缺少ing_month变量的原因Unix 需要从行中提取特定文本,unix,awk,sed,Unix,Awk,Sed,我需要从下面提到的行中提取特定变量,我尝试使用sed提取变量,但我不确定缺少ing_month变量的原因 Script: echo "ing_year=2016,ing_month=03,ing_day=11" | sed 's/=.*,/,/g' | sed 's/=.*//g' 所需输出: 年、月、日 请帮助我理解,或者如果有任何优化命令帮助我。正则表达式将始终尽可能匹配。如果这不是你想要的,那就减少匹配。常用的排列方式是排除分隔符 sed 's/=[^=,]*//g' <<
Script:
echo "ing_year=2016,ing_month=03,ing_day=11" | sed 's/=.*,/,/g' | sed 's/=.*//g'
所需输出:
年、月、日
请帮助我理解,或者如果有任何优化命令帮助我。正则表达式将始终尽可能匹配。如果这不是你想要的,那就减少匹配。常用的排列方式是排除分隔符
sed 's/=[^=,]*//g' <<<'ing_year=2016,ing_month=03,ing_day=11'
(并非所有的
sed
方言都像多个-e
选项。如果这不符合要求,请参阅手册页了解详细信息。)正则表达式将始终尽可能匹配。如果这不是你想要的,那就减少匹配。常用的排列方式是排除分隔符
sed 's/=[^=,]*//g' <<<'ing_year=2016,ing_month=03,ing_day=11'
(并非所有的sed
方言都像多个-e
选项。如果这不符合要求,请参阅手册页了解详细信息。)给你:
$ echo "ing_year=2016,ing_month=03,ing_day=11" | sed -r 's/([^=]+)=([^,]*)/\1/g'
ing_year,ing_month,ing_day
断开数据并全局应用。给您:
$ echo "ing_year=2016,ing_month=03,ing_day=11" | sed -r 's/([^=]+)=([^,]*)/\1/g'
ing_year,ing_month,ing_day
断开数据并全局应用。
awk
救援
$ echo "ing_year=2016,ing_month=03,ing_day=11" |
awk -F'[=,]' -v OFS=, '{print $1,$3,$5; print $2,$4,$6}'
ing_year,ing_month,ing_day
2016,03,11
这将在两个单独的行中提取键和值,删除不需要的打印语句。
awk
拯救
$ echo "ing_year=2016,ing_month=03,ing_day=11" |
awk -F'[=,]' -v OFS=, '{print $1,$3,$5; print $2,$4,$6}'
ing_year,ing_month,ing_day
2016,03,11
这将在两个单独的行中提取键和值,删除您不需要的print语句。起初我很困惑,认为OP想要每个变量的值,但从编写方式来看,似乎他/她想要的是变量名。我使用的是Windows7,但我在bashshell中键入了您的第一行,bashshell是我git环境的一部分。它给出了和你得到的相同的结果线。这就是OP所说的他/她想要的。QED(对你来说也是一点。)起初我很困惑,认为OP想要每个变量的值,但从它的编写方式来看,似乎他/她想要的是变量名。我使用的是Windows7,但我在bashshell中键入了您的第一行,bashshell是我git环境的一部分。它给出了和你得到的相同的结果线。这就是OP所说的他/她想要的。QED(对你来说也是一个要点。)