我只需要在此行中打印900
:auth required pam_faillock.so preauth silent deny=3 unlock_time=604800 fail_interval=900
但是,此行并不总是按此顺序排列。
我需要了解如何在=
之后打印值。
我需要为unlock_time
和fail_interval
我一整夜都在寻找能够完全适合我并且找不到它的东西。我一直在玩sed和awk并且还没有把它钉死。
答案 0 :(得分:3)
让我们定义你的字符串:
s='auth required pam_faillock.so preauth silent deny=3 unlock_time=604800 fail_interval=900'
使用awk:
$ printf %s "$s" | awk -F= '$1=="fail_interval"{print $2}' RS=' '
900
或者:
$ printf %s "$s" | awk -F= '$1=="unlock_time"{print $2}' RS=' '
604800
Awk将其输入分为记录。我们告诉它使用空格作为记录分隔符。每条记录分为几个字段。我们告诉awk使用=
作为字段分隔符。更详细:
printf %s "$s"
这会打印字符串。如果字符串可能以printf
开头,则echo
比-
更安全。
-F=
这告诉awk使用=
作为字段分隔符。
$1=="fail_interval" {print $2}
如果第一个字段是fail_interval
,那么我们告诉awk打印第二个字段。
RS=' '
这告诉awk使用空格作为记录分隔符。
答案 1 :(得分:0)
您可以将sed
用于此
<强>命令强>
echo "...stuff.... unlock_time=604800 fail_interval=900" | sed -E '
s/^.*unlock_time=([[:digit:]]*).*fail_interval=([[:digit:]]*).*$/\1 \2/'
<强>输出强>
604800 900
备注强>
(..)
中的sed
用于选择。[[:digit:]]*
或0-9
用于匹配任意数量的数字\1
和\2
用于按顺序替换匹配的内容。答案 2 :(得分:0)
尝试使用它。
unlock_time=$(echo "auth required pam_faillock.so preauth silent deny=3 unlock_time=604800 fail_interval=900" | awk -F'unlock_time=' '{print $2}' | awk '{print $1}')
echo "$unlock_time"
fail_interval=$(echo "auth required pam_faillock.so preauth silent deny=3 unlock_time=604800 fail_interval=900" | awk -F'fail_interval=' '{print $2}' | awk '{print $1}')
echo "$fail_interval"
答案 3 :(得分:0)
给出input
变量:
input="auth required pam_faillock.so preauth silent deny=3 unlock_time=604800 fail_interval=900"
使用GNU grep:
$ grep -oP 'fail_interval=\K([0-9]*)' <<< "$input"
900
$ grep -oP 'unlock_time=\K([0-9]*)' <<< "$input"
604800