我有一个脚本在/ etc / passwd中重写一行的UID,但仅当UID> 500.它的工作但是......我想用一个命令来重写所有的线路,我不知道它是否可能。
让我告诉你我的代码:
#!/bin/bash
while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
if [ $f3 -gt 500 ]
then
echo "$f1:$f2:$f3:$f4:$f5:$f6:$f7" <<< there is a single command for that ?
fi
done < /etc/passwd
感谢您的回复:)
答案 0 :(得分:3)
尝试
awk -F: '$3>=500 {print $0}' /etc/passwd
答案 1 :(得分:1)
使用数组:
#!/bin/bash
while IFS=: read -r -a f; do
if (( ${f[2]} > 500 )); then
IFS=: b="${f[*]}"
echo "$b"
fi
done < /etc/passwd
答案 2 :(得分:0)
我会将整行读入一个变量,然后在循环中拆分。
while read line; do
old=IFS
IFS=:
set -- $line
IFS=$old
test $3 -gt 500 || continue
printf "%s\n" "$line"
done </etc/passwd
答案 3 :(得分:0)
bash解决方案:
while read line
do
arr=(${line//:/ })
[ ${arr[2]} -gt 500 ] && echo $line
done < /etc/passwd
将整个记录拆分成一个数组并检查包含user-id的第二个索引元素。