我有这个 bash:
replace="s/AAAA/BBBB/g";
find myDirectory/. -type f -print0 | xargs -0 sed -i $replace;
Run Code Online (Sandbox Code Playgroud)
这将递归扫描myDirectory
树并替换那里文件上所有出现的AAAA
with BBBB
。
但我想限制这种情况发生在特定的扩展的文件,例如.txt
,.read
,.po
我如何施加这个限制?
我有一个包含员工姓名、部门和员工所在城市的文件,例如:
John
IT
Chicago
Joshua
accounting
New York
Marcy
CEO
Los Angeles
...
Run Code Online (Sandbox Code Playgroud)
我必须将此文件转换为这种格式:
John?IT?Chicago
Joshua?accounting?New York
Marcy?CEO?Los Angeles
Run Code Online (Sandbox Code Playgroud)
使用问号作为字段分隔符
到目前为止,我已经完成了这个 bash 脚本:
fname="mix.txt"
exec<$fname
index=0
while read line ; do
ARRAYLINES[$index]="$line"
index=$(($index+1))
done < $fname
NUMBERLINES=$(grep -c "" $fname)
NUMBERLOOP=$(($NUMBERLINES/3))
count=0
for i in $(eval echo {1..$NUMBERLOOP})
do
one=$(($count+1))
two=$(($count+2))
LINE0=${ARRAYLINES[$count]}
LINE1=${ARRAYLINES[$one]}
LINE2=${ARRAYLINES[$two]}
((count + 3))
FINAL="$LINE0?$LINE1?$LINE2"
echo $FINAL >> final.txt
done
Run Code Online (Sandbox Code Playgroud)
最终文件具有正确的行数,但所有行都等于第一个员工数据,例如
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
John?IT?Chicago
Run Code Online (Sandbox Code Playgroud)
任何线索?
在 bash 脚本中,我有一行创建然后在循环中,将字符串附加到文本文件中,例如
echo $myTextString >> file.txt
Run Code Online (Sandbox Code Playgroud)
我需要使用Western (Mac OS Roman)格式化这个最终文件。
脚本启动时该文件不存在,因此第一行将创建该文件。有没有办法使文件成为该格式或在最后将其转换为这种 Mac OS Roman 格式?我如何在 bash 脚本中做到这一点?
我有这样的代码
#! /bin/bash
$version = "1.0";
$preffix = "ApplicationName.";
for f in pack*;
do
echo "bla bla bla" > myFile.txt
echo $preffix >> myFile.txt
echo "more stuff" >> myFile.txt
echo $version >> myFile.txt
done;
Run Code Online (Sandbox Code Playgroud)
输出是
bla bla bla
more stuff
Run Code Online (Sandbox Code Playgroud)
$version 和 $prefix 没有添加到 myFile.txt ......为什么?
我有一个文件,在其他行中包含这样的条目
Feb 16 17:30:18 ns1 dovecot: pop3-login: Disconnected (auth failed, 1 attempts in 17 secs): user=<accountin@myserver.com>, method=PLAIN, rip=200.250.9.210, lip=10.10.10.10, session=<Sed519rVnADI+gnS>
Run Code Online (Sandbox Code Playgroud)
每次找到这样的一行时,我都想提取与 rip 部分关联的 IP,但我想提取至少显示 3 次的 IP。
我正在尝试使用 grep 来做到这一点。
这是我的 grep
more /var/log/maillog-20130217 | grep "auth failed" | grep -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4
][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
Run Code Online (Sandbox Code Playgroud)
此 grep 显示匹配行中的所有 IP
如果我至少有 3 行与该 IP 匹配且只有唯一 IP,我该如何限制此 grep 仅显示 IP?
我是说这个。假设我的日志有这个
Feb 16 17:30:18 ns1 dovecot: pop3-login: Disconnected (auth failed, 1 attempts in 17 secs): user=<accountin@myserver.com>, method=PLAIN, rip=200.250.9.210, lip=10.10.10.10, session=<Sed519rVnADI+gnS>
Feb 16 17:30:18 ns1 …
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的 csv 文件:
5/05/2017;03;07;30;35;43;01;03
9/05/2017;08;12;16;22;26;06;07
12/05/2017;02;20;28;29;44;03;09
16/05/2017;08;11;15;20;30;03;08
19/05/2017;09;11;12;19;30;04;09
23/05/2017;08;15;25;27;42;01;04
26/05/2017;05;07;26;36;39;02;10
...
Run Code Online (Sandbox Code Playgroud)
也就是说,一个日期,加上一系列数字,后跟;
。
我需要在第一个位置删除那个日期,并按顺序从 1004 开始......像这样:
1004;03;07;30;35;43;01;03
1005;08;12;16;22;26;06;07
1006;02;20;28;29;44;03;09
1007;08;11;15;20;30;03;08
1008;09;11;12;19;30;04;09
1009;08;15;25;27;42;01;04
1010;05;07;26;36;39;02;10
...
Run Code Online (Sandbox Code Playgroud)
我可以使用这个删除日期:
cut -f 2-8 -d';' 2.txt | xargs -I{}
Run Code Online (Sandbox Code Playgroud)
但是如何按顺序添加一个数字来替换日期?
我在一家不允许我在我的电脑上安装任何软件的公司工作,而且我在那里运行的窗口很糟糕。
我需要清理很多我从内网复制的文本并保存为txt文件。所以我必须使用sed
和/或awk
在线实时编辑器,像这样或这样
这些文字是这样的
01
010010-26.2010.501.0026 fafas fasdf asdf asdfsadf asdfasd fasd asasdff
fdfsadf adsf adsf asdf asdfas fadsf asdfa
02
0011-15.2016.501.0012 fafas fasdf asdf asdfsadf asdfasd fasd asasdff
asdfasd fasd asasdff
asdfasd fasd asasdff
0011-125.2013.501.0012
asdfasd fasd asasdff
Run Code Online (Sandbox Code Playgroud)
看到这样的数字0011-15.2016.501.0012
就是我想要的。我不关心其余的,但我想用所有这些数字创建一个新的干净文本,每行一个。在前面的例子中,我需要一个文本
010010-26.2010.501.0026
0011-15.2016.501.0012
0011-125.2013.501.0012
Run Code Online (Sandbox Code Playgroud)
将.501.
始终存在,在所有的数字,是4组。
我在 sed 在线编辑器上试过这个命令
's/\([0-9]*\-[0-9]*\.[0-9]*\.501\.[0-9]*\)/\1/'
Run Code Online (Sandbox Code Playgroud)
不工作。
我有一堆这样的文件:
pic100.png
pig102.png
box103a.png
superb103b.png
px103c.png
rotor110 - new.png
ready1323 (yellow car).png
motorhome1036x red circle.png
...
Run Code Online (Sandbox Code Playgroud)
因此,您可以注意到文件可能有 3 个部分:
我需要的是:我想在一次操作中:
使用第一个示例,我可能想将其转换为
object100.png
object102.png
object103a.png
object103b.png
object103c.png
object110.png
object1323.png
object1036x.png
Run Code Online (Sandbox Code Playgroud)
我怎么做?正如你看到的,我唯一保留的是数字和后缀“a,b,c”,当有一个时......
为简单起见,该命令必须在给定目录中的所有文件中运行。
提前致谢。
我有一个包含无数文件的目录。一旦我尝试复制此目录,我就会收到一条消息,指出无法复制文件(损坏?)并且复制停止。
我可以在终端上输入任何命令来检查该目录树上的所有文件并列出所有无法复制或损坏的文件吗?我现在不想复制文件,只是为了检查如果我尝试是否无法复制/读取文件。
我在 OS X Mountain Lion 上,但我希望任何 unix 命令都可以正常工作。
谢谢。
注意:损坏是指无法读取或复制的文件。
我有一个包含 800 个文件的目录,如下所示:
file1.png
file1@2x.png
file2.png
file2@2x.png
file3.png
file3@2x.png
... etc
Run Code Online (Sandbox Code Playgroud)
我需要创建这样的 zip 文件
file1.zip (containing file1.png and file1@2x.png)
file2.zip (containing file2.png and file2@2x.png)
file3.zip (containing file3.png and file3@2x.png)
Run Code Online (Sandbox Code Playgroud)
有没有我可以使用的魔法命令来做到这一点?