标签: text-processing

不知何故,我创建了一个不确定的 sh 脚本

我创建了以下脚本:

#!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 虚拟机上运行了这个脚本。这可能是原因吗?

command-line bash scripts sed text-processing

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

`awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow` 的解释是什么?

我正在使用该命令来获取登录我机器的用户列表,但我无法理解该命令的含义。

awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow
Run Code Online (Sandbox Code Playgroud)

command-line awk text-processing

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

用迭代器替换字符串

我有一个包含要替换的字符的文件,但我也希望替换字符的每个实例,并在 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

command-line bash text-processing

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

如何从命令的输出中提取特定的列或行?

例子:

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)

我将如何从输出中提取一列,比如第二列?并且,例如,将其存储在变量中?

是否有可能做到这一点?

command-line output text-processing

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

基于某些模式排除文件中的行

我的文件看起来像这样

[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 开头的行(空格不必在那里)

command-line text-processing

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

如何删除文件每一行的第一个空格?

我有一个文件,看起来像

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

text bash grep sed text-processing

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

使用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 做到这一点。

command-line bash text-processing

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

如何在带有 awk 的 shell/终端中使用 for 循环?

命令

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}'

command-line dpkg awk text-processing

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

如何通过命令查找文件中重复单词的数量?

如何在句子开头找到文件中重复单词的数量?例如

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。

command-line text-processing

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

如何从文件中搜索和剪切字符串?

我正在尝试编写一个带有类似选项和参数的程序:

./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)

我怎样才能实现这样的行为?

command-line bash sed awk text-processing

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

标签 统计

text-processing ×10

command-line ×9

bash ×5

awk ×3

sed ×3

dpkg ×1

grep ×1

output ×1

scripts ×1

text ×1