如何从bash中的特定点创建新行?

时间:2018-03-24 03:54:38

标签: bash

我想从'{'创建一个新行。 “{”之后的任何句子都需要在新行中。

Currrent输出:

void logical_jmp(int loc)

int branch_jmp(int loc)

必需的输出:

dirName=$1

if [[ -d $dirName ]]; then

    cfile=$(find $dirName -type f -name "*.c"|sort -n)

    for i in $cfile; do
        echo $i:
        if grep -q -E "^void|^int|^FILE*" $i; 
        then
            func=$(cat $i |grep -E "^void|^int|^FILE*"|sed 's/[{$] */\n/g')         
            echo $func
            echo
        else
            echo Unable to find any functions
        fi              
    done        
else
    echo file is not a directory
fi

这是任务: 找到给定目录的所有C函数。您的脚本必须以递归方式查看目录并查找所有.c文件并输出其中包含的函数。

我的代码:

i

2 个答案:

答案 0 :(得分:2)

简单awk可能会对您有所帮助。

awk '{gsub(/{ |{/,ORS)} 1' Input_file

答案 1 :(得分:0)

您可以使用tr '{' '\n' | sed 's/^//' 也许你可以用

采取另一种方法
grep -Eo "^(void|char|int)[^(]+\([^)]*\)" *.c

此正则表达式假设所有函数都是void,char或int类型,类型从行的第一个位置开始,并在行中包含字符()
您可以修改正则表达式以满足您的要求。