我创建了以下脚本:
#!bin/bash
cat > Top10 <<EOF
Linux Mint 17.2
Ubuntu 15.10
Debian GNU/Linux 8.2
Mageria 5
Fedora 23
openSUSE Leap 42.1
Arch Linux
CentOS 7.2-1511
PCLinuxOS 2014.12
Slackware Linux 14.1
FreeBSD
EOF
sed -ri "s/^[^0-9]*$//" Top10
sed -r "s/(.*)([[:space:]][[:digit:]]*.*)$/\2\1/" Top10 | sed -r "s/([[:space:]])([[:digit:]])/\2/" | sed -r "s/([[:digit:]])([[:alpha:]])/\1 \2/" > Top10
sed -r -i "s/(.*)/\L\1/" Top10
sed -r -i "y/[aeiou]/[AEIOU]/" Top10
sort Top10 -g -o Top10
cat Top10
Run Code Online (Sandbox Code Playgroud)
当我运行它几次时,会发生以下情况:
正如您所看到的,有时 Top10 文件会变成空文件,有时会变成我需要的样子。我知道替换从一行的末尾到前面的扩展名的命令做得很差。我在 VMware 虚拟机上运行了这个脚本。这可能是原因吗?
我正在使用该命令来获取登录我机器的用户列表,但我无法理解该命令的含义。
awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow
Run Code Online (Sandbox Code Playgroud) 我有一个包含要替换的字符的文件,但我也希望替换字符的每个实例,并在 sting 替换中使用一个数字进行迭代。
一些文件.txt
[H
A
[H
B
[H
C
Run Code Online (Sandbox Code Playgroud)
我想用“ </pre></div><div id=cat$n><pre>”替换“[H”,其中 $n 是替换次数的迭代器。所以第一个替换将是 1、2、3、4、n++ 等等。
有没有办法做到这一点sed?
例子:
abcd@abcd-abcde:~$ xinput --list --short
Virtual core pointer
? SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)]
? Logitech USB RECEIVER id=12 [slave pointer (2)]
Run Code Online (Sandbox Code Playgroud)
我将如何从输出中提取一列,比如第二列?并且,例如,将其存储在变量中?
是否有可能做到这一点?
我的文件看起来像这样
[0.00137532,[0,13,19,16,18,15,19,16,11,15,12,12,13,14,0,11,17,18,14,17],[0,0,0,0,0,0,0,0,0,0,0,0.0189924,0.0871235,0.179813,0.307779,0$
SITE: 0 0.000853196055 0.0694597696 0000000001
[0.00111747753,[0,13,18,16,19,15,18,19,11,15,12,12,13,14,0,11,17,14,16,17],[0,0,0,0,0,0,0,0,0,0,0,0.018992411,0.0871235198,0.179812517$
[0.000200093646,[0,13,19,17,18,16,19,15,11,16,12,12,13,14,15,0,11,18,14,17],[0,0,0,0,0,0,0,0,0,0,0,0.018992411,0.0871235198,0.17981251$
[1.9658373e-05,[0,18,14,11,12,19,14,15,16,19,17,12,13,0,11,13,17,18,15,16],[0,0,0,0,0,0,0,0,0,0,0,0.106437198,0.163778333,0.758483056,$
[0.000282736441,[0,18,15,11,13,19,15,12,16,19,17,12,13,14,0,11,17,18,14,16],[0,0,0,0,0,0,0,0,0,0,0,0.106437198,0.129806881,0.163778333$
[0.00111187732,[0,13,19,16,18,15,19,17,11,15,12,12,13,14,0,11,17,18,14,16],[0,0,0,0,0,0,0,0,0,0,0,0.018992411,0.0871235198,0.179812517$
SITE: 1 0.00363901565 0.820587534 1000100111
[0.000647295926,[0,13,19,16,18,15,19,17,11,15,12,12,13,14,0,11,17,18,14,16],[0,0,0,0,0,0,0,0,0,0,0,0.018992411,0.0871235198,0.17981251$
[0.000272141,[0,11,19,16,18,15,19,17,13,15,14,12,0,14,11,13,17,18,12,16],[0,0,0,0,0,0,0,0,0,0,0,0.687401201,0.989300937,0.018992411,0.$
[1.82208814e-05,[0,11,16,13,15,19,16,14,17,19,18,12,0,14,15,11,13,18,12,17],[0,0,0,0,0,0,0,0,0,0,0,0.569817481,0.687401201,0.106437198$
[0.000160613913,[0,11,19,16,18,15,19,17,13,15,14,12,0,14,11,13,17,18,12,16],[0,0,0,0,0,0,0,0,0,0,0,0.687401201,1.05012976,0.018992411,$
SITE: 2 0.00509457547 0.0291019941 1000000000
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到一个新文件,其中排除了以 SITE 开头的行(空格不必在那里)
我有一个文件,看起来像
SPT-CL J0000-5748 J000106.23-574536.8 0.275980 -57.760231 0.7554 0.0003 template 1
SPT-CL J0000-5748 J000049.27-574637.3 0.205320 -57.777050 0.7018 0.0002 template 1
SPT-CL J0000-5748 J000059.24-574759.6 0.246850 -57.799889 0.7059 0.0002 template 1
SPT-CL J0000-5748 J000107.36-574648.7 0.280680 -57.780209 0.6981 0.0002 template 1
Run Code Online (Sandbox Code Playgroud)
几千行。我需要所有的SPT-CL J0000-5748变成SPT-CLJ0000-5748. 我怎样才能通过 快速做到这一点bash?
我有一个格式的文件
<string> <string> <string>
..
..
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 sed 用随机数据替换第三列字符串。第三列字符串长度固定,为48位
我能够使用 read 修复解决方案
while read a b c; do
echo $a $b $(cat /dev/urandom | tr -dc '0-1' | fold -w 48 | head -n 1)
done < input > output
Run Code Online (Sandbox Code Playgroud)
然而,循环过程也需要太长时间。我怎样才能用 sed 做到这一点。
命令
dpkg -l | awk '$2=="ufw" {sub("ubuntu[^[:alpha:]]*$", "", $3); print $3"\t"$2}'
Run Code Online (Sandbox Code Playgroud)
输出:
0.34~rc-0 ufw
Run Code Online (Sandbox Code Playgroud)
现在$2=="ufw",我不想像那样指定包名,而是想迭代并获取所有包的列表,如下所示:
2.20.1-5.1 util-linux
1.0.2-1 zerofree
0.34~rc-0 ufw
Run Code Online (Sandbox Code Playgroud)
编辑
自己犯了一个语法错误。我应该直接使用相同的命令,删除$2=="ufw". 答案是dpkg -l | awk '{sub("ubuntu[^[:alpha:]]*$", "", $3); print $3"\t"$2}'。
如何在句子开头找到文件中重复单词的数量?例如
abc bdbdndnvd hddh hcjdhjc
dgdgd ghcdggcd abc hjdhcj
abc ghdsgcgdc cdghcgd dhgch
hshhj hcdhchd hdjchjd
Run Code Online (Sandbox Code Playgroud)
输出:
abc
Run Code Online (Sandbox Code Playgroud)
只对开始时整个文件中的重复单词感兴趣。如果其他地方的那个词不应该被计算在内。即在上面的例子abc中重复两次。谁能建议我如何使用命令来做到这一点?我正在使用 Ubuntu 16.04。
我正在尝试编写一个带有类似选项和参数的程序:
./program.sh -f <filename> -string <string>
Run Code Online (Sandbox Code Playgroud)
该程序应该输出<filename>其开头的行,<string>如下所示:
grep ^<string> <filename>
Run Code Online (Sandbox Code Playgroud)
另外,它应该返回一些与字符串相关的信息,例如以下示例输入文件中的姓名和年龄:
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这样的行为?
text-processing ×10
command-line ×9
bash ×5
awk ×3
sed ×3
dpkg ×1
grep ×1
output ×1
scripts ×1
text ×1