在Linux中添加新行

在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中有几个我不感

因此,我试图编写一个脚本,将进程的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中有几个我不感兴趣的文件和目录。我只对具有数字名称的目录感兴趣,因为它们包含流程数据。然后迭代/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:“多次”并不重要。