小编Spi*_*ike的帖子

如何grep开始和结束模式之间的行?

我有一个包含以下内容的文件:

zdk
aaa
b12
cdn
dke
kdn
Run Code Online (Sandbox Code Playgroud)

输入 1:aaacdn

输出 1:

aaa
b12
cdn
Run Code Online (Sandbox Code Playgroud)

输入 2:zdkdke

输出 2:

zdk
aaa
b12
cdn
dke
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令来实现:

grep -a aaa -A2 file # Output 1
grep -a aaa -A4 file # Output 2
Run Code Online (Sandbox Code Playgroud)

但是在文件中我不知道结束字符串模式的确切出现(位置)是什么(文件有 20000 行)

我怎样才能做到这一点?

grep sed awk text-processing

45
推荐指数
1
解决办法
12万
查看次数

如何用分隔符将两行包装成单行

我已经执行了以下命令

cat /proc/loadavg && date
Run Code Online (Sandbox Code Playgroud)

实际结果:

0.00 0.00 0.00 1/803 26256
Fri Aug 26 09:00:56 EEST 2016
Run Code Online (Sandbox Code Playgroud)

预期结果:

0.00 0.00 0.00 1/803 26256 @@ Fri Aug 26 09:00:56 EEST 2016
Run Code Online (Sandbox Code Playgroud)

我试过sedtr,但没有奏效。

cat /proc/loadavg && date | sed 's/\n/ @@ /g'

cat /proc/loadavg && date | tr '\n' ' @@ '
Run Code Online (Sandbox Code Playgroud)

任何想法,我缺少什么?

shell text-processing

7
推荐指数
3
解决办法
3071
查看次数

如何比较shell脚本中的浮点值?

如果我的平均负载超过 10,我需要提醒。

如果我的 awk 命令返回一个整数,我可以这样做:

declare -i MAX_LOAD=10

declare -i L1=`cat /proc/loadavg | awk {'print $1'}`

if [ $L1 -gt $MAX_LOAD ]
then
    echo "Alert"
fi
Run Code Online (Sandbox Code Playgroud)

但它返回 L1 中的浮点值(例如,2.35)。

我如何比较这种情况下的值?

awk shell-script floating-point

5
推荐指数
1
解决办法
1268
查看次数

usermod 更改用户密码不起作用

我使用以下命令创建了用户

useradd myuser
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用以下命令更改密码

usermod --password mypwd myuser
Run Code Online (Sandbox Code Playgroud)

(我知道普通密码不是一个好方法,但暂时我正在这样做)

我尝试myuser使用mypwd. 但是,它不允许登录(密码错误)。

我可以使用passwd myuser(工作正常)。有一些限制,所以我正在使用usermod.

我有什么遗漏usermod吗?或者除了更改密码之外还有其他选择passwd username吗?

users password useradd passwd

5
推荐指数
1
解决办法
7526
查看次数

如何打印具有基于分隔符的值的第一个字段

文件 ( myfile.txt) 包含如下数据:

abc#ab1=23
nrt#
#clb1aX
amd#322
Run Code Online (Sandbox Code Playgroud)

期望输出:

abc
nrt
clb1ax
amd
Run Code Online (Sandbox Code Playgroud)

我可以这样做,

for i in `cat myfile.txt` 
do 
  s1=`echo $i | cut -d'#' -f1`; 
  s2=`echo $i | cut -d'#' -f2`; 
  if [ "$s1" == "" ]; then 
    echo "$s2" 
  else
    echo "$s1"
  fi;
done;
Run Code Online (Sandbox Code Playgroud)

不过反正是有做到这一点,而无需使用forif,就像使用awksedcut或单行其他什么东西?

awk shell-script cut

3
推荐指数
1
解决办法
1080
查看次数

如何根据有空格的分隔符剪切字符串

variable_list="
 any:any:-a -b -c any
 one:one:-c -b -f -m mul
 mul:one:-c -b -f -m mul
"
for f in `echo $variable_list`
do
  c1=`echo $f | cut -d':' -f1`;
  c2=`echo $f | cut -d':' -f2`;
  c3=`echo $f | cut -d':' -f3-`;
  echo "c1==>$c1 and c2==>$c2 and c3==>$c3";
  #exit 0; ###I made mistake here
done;
Run Code Online (Sandbox Code Playgroud)

预期输出:

c1==>any and c2==>any and c3==>-a -b -c any
c1==>one and c2==>one and c3==>-c -b -f -m mul
c1==>mul and c2==>one and c3==>-c -b -f -m mul …
Run Code Online (Sandbox Code Playgroud)

cut

1
推荐指数
1
解决办法
1515
查看次数

如何根据时间戳合并多个文件

我有2个文件

文件 1:

01:12:00,001 Some text

01:14:00,003 Some text

02:12:01,394 Some text
Run Code Online (Sandbox Code Playgroud)

文件2:

01:12:00,001 Some text

01:12:01,029 Some text

01:13:21,123 Some text
Run Code Online (Sandbox Code Playgroud)

我需要如下输出:

01:12:00,001 Some text

01:12:00,001 Some text

01:12:01,029 Some text

01:13:21,123 Some text

01:14:00,003 Some text

02:12:01,394 Some text    
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

awk shell-script cat paste

0
推荐指数
2
解决办法
3585
查看次数