在Linux中添加新行
因此,我试图编写一个脚本,将进程的cmds存储在/proc中。这是我的剧本:在Linux中添加新行,linux,io-redirection,Linux,Io Redirection,因此,我试图编写一个脚本,将进程的cmds存储在/proc中。这是我的剧本: $ re='^[0-9]+$ $ for i in `ls /proc`; do if [[ $i =~ $re ]] ; then cd /proc/$i;cat cmdline >> /home/nisarg/CMD;fi; done $over是shell提示符 我首先设置了一个正则表达式re,它有助于检查/proc中的子目录是否有数字名称。例23331。我这样做是因为/proc中有几个我不感
$ re='^[0-9]+$
$ for i in `ls /proc`; do if [[ $i =~ $re ]] ; then cd /proc/$i;cat cmdline >> /home/nisarg/CMD;fi; done
$over是shell提示符
我首先设置了一个正则表达式re,它有助于检查/proc中的子目录是否有数字名称。例23331。我这样做是因为/proc中有几个我不感兴趣的文件和目录。我只对具有数字名称的目录感兴趣,因为它们包含流程数据。然后迭代/proc,如果(使用regex)发现某个目录有一个数字名称,则输入该目录(使用cd),并将存储在文件cmdline中的值附加到主文件夹中名为CMD的文件中
我的问题是,当我在/home/nisarg中打开CMD文件时,我发现所有CMD都存储在一行中。我一直认为>>
是一个新行的附加部分。不是吗
如果没有,是否有任何方法可以将它们存储在新行上?
>
只是附加到一个文件,它不会添加新行。问题在于cmdline
并不是以换行符结尾。您只需添加echo
即可添加换行符:
(echo ; cat cmdline) >> /home/nisarg/CMD
使用bash
及其extglob
选项很简单,不过:
#! /bin/bash
shopt -s extglob
for c in /proc/+([0-9])/cmdline ; do
echo
cat "$c"
done > ~/CMD
这确实有效,但我在输出中的CMD之间也有几行空白。是否可能是/proc的某些子目录在cmdline文件中没有值,这就是我得到这些空行的原因?@nisarg:没错。如果只需要非空行,请在
完成后插入| grep.
。是的,这将获取所有非空行。但原因是grep之后的
,对吗?它的意思是多次抓住某件东西,对吗?@nisarg:“多次”并不重要。