Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux xargs在格式中不保留前导空格_Linux_Sed_Printf_Csh_Xargs - Fatal编程技术网

Linux xargs在格式中不保留前导空格

Linux xargs在格式中不保留前导空格,linux,sed,printf,csh,xargs,Linux,Sed,Printf,Csh,Xargs,在LinuxCShell中,我需要用一个变量替换文件中的一行,该变量包含一组数字和一个字符串。我正在使用printf、xargs和sed的组合来保留所建议的格式。 这是我到目前为止的代码(我在csh中找不到更简单的方法): 结果是: > cat myfile.txt 16 2 2 2 2 2 2 2 Number of gradient directions 但我需要: > cat myfile.txt 16 2 2 2 2 2 2 2

在LinuxCShell中,我需要用一个变量替换文件中的一行,该变量包含一组数字和一个字符串。我正在使用printf、xargs和sed的组合来保留所建议的格式。 这是我到目前为止的代码(我在csh中找不到更简单的方法):

结果是:

> cat myfile.txt
16  2  2  2  2  2  2  2     Number of gradient directions
但我需要:

> cat myfile.txt
 16  2  2  2  2  2  2  2     Number of gradient directions

唯一的问题是该行仅丢失变量$ndir的第一个索引的%3d格式。我需要为整行保留此格式。是否有更微妙的方法或修复方法?

-d'\n'
添加到
xargs
命令:

printf "$afmt" $ndir "     Number of gradient directions" | xargs -d'\n' -I '{}' sed -i '/Number of gradient directions/c\{}' myfile.txt
问题在于使用
-I
时,
xargs
会从每个输入行中修剪前导空格,您可以通过以下方式进行验证:

% echo '  A   B  ' | xargs -I {} echo "[{}]"
[A  B  ]
添加选项
-d'\n'
将停用此行为,并导致整行按原样传递:

% echo '  A   B  ' | xargs -d'\n' -I {} echo "[{}]"
[  A  B  ]

另外(与Linux无关):

BSD/OSX
xargs
不仅使用
-I
修剪前导和尾随空格,还规范行内部空格;由于BSD/OSX
xargs
不支持
-d
选项,因此需要以下变通方法来按原样传递行(也适用于GNU
xargs
):


你太棒了,谢谢。我更改了问题的标题,以便其他人可以更轻松地找到他们的相关问题。@S.M:我很高兴-感谢您更新问题的标题。
% echo '  A   B  ' | xargs -d'\n' -I {} echo "[{}]"
[  A  B  ]
% echo '  A   B  ' | tr '\n' '\0' | xargs -0 -I {} echo "[{}]"
[  A  B  ]