文件我使用sed
来连接文件的内容为:格式基础上,IFS
cat source.c | sed -e :a -e '$!N; s/\n/ /; ta'
该文件包含相关信息[系列串]通过管道|
分离。 我想将IFS
更改为管道|
,并且可以通过管道将输出传递到新的IFS
,从而向标准输出显示新格式的文件。
拼接后由source.c的实例:
void f0 (***) | void f1 (***) | void f2 (***)| void f3 (***)
我希望通过设置IFS
实现:事先的答复
void f0 (***)
void f1 (***)
void f2 (***)
void f3 (***)
感谢。我是不知道,如果它可能与文件,我不想在这里涉及变量或数组。
编辑:源文件中像这样出现一些什么样的开头:
void
f0
(***) |
void
f1
(***) |
void f2 (***) |
void f3 (***)
所以首先我串连然后我加倍空间每个字组,然后用管道作为分隔符分割。
sed -e :a -e '$!N; s/\n/ /; ta' source.c | sed -e 's/ */ /g' -e 's/ *//'
的sed
和awk
替代做这项工作完美。
根据upvotes在第一次编辑时选择的答案:)。 正如我在其中一个答案中所建议的那样,我将这个问题保持不变,以便其他人找到这些简单的替代方案,而不是与IFS
混淆。
如果输入到'sed'是“每行一个功能”,并从过程所需输出的是“每行一个功能”,你为什么穿通'将文件中的所有功能拼合成一行'的中间阶段?从表面上看,您似乎希望将输入格式作为输出格式。 –
他在最初的换行符上是扁平化的,并且希望管道符号替换它们,所以除非它们处于行结尾或行首,否则结果将会有很大不同。 – lynxlynxlynx
@JonathanLeffler我编辑了这篇文章,让它更清晰一点 – Gil