相关疑难解决方法(0)

如何选择两个标记图案之间的线条,这些线条可能会出现awk/sed多次

使用awksed如何选择两种不同标记图案之间的线条?可能有多个标有这些图案的部分.

例如:假设文件包含:

abc
def1
ghi1
jkl1
mno
abc
def2
ghi2
jkl2
mno
pqr
stu
Run Code Online (Sandbox Code Playgroud)

并且起始模式是abc和结束模式是mno So,我需要输出为:

def1
ghi1
jkl1
def2
ghi2
jkl2
Run Code Online (Sandbox Code Playgroud)

我使用sed匹配模式一次:

sed -e '1,/abc/d' -e '/mno/,$d' <FILE>
Run Code Online (Sandbox Code Playgroud)

有没有办法在sedawk 反复做,直到文件的结尾?

unix shell awk sed pattern-matching

114
推荐指数
5
解决办法
14万
查看次数

在Bash或Shell脚本中转​​发函数声明?

例如bash,在C/C++中众所周知的前向声明是否有类似的东西或至少类似的东西(解决方法)?

或者有这样的事情,因为例如它总是一次性执行(一行一行)?

如果没有前向声明,我该怎么做才能使我的脚本更容易阅读.它相当长,这些函数定义在开始时与全局变量混合,使我的脚本看起来很难看,难以阅读/理解)?我要求学习一些这些案例的知名/最佳实践.


例如:

# something like forward declaration
function func

# execution of the function
func

# definition of func
function func
{
    echo 123
}
Run Code Online (Sandbox Code Playgroud)

bash function sh forward-declaration

89
推荐指数
2
解决办法
2万
查看次数

通过命令行列出已安装的sdk软件包

我想通过命令行列出已安装的sdk软件包.(由于某些原因我无法使用GUI)

我做了一些研究,发现了几个命令来列出远程服务器上的可用软件包,但是我找不到任何命令来列出已安装的sdk软件包.

谢谢

android android-sdk-tools

26
推荐指数
2
解决办法
4万
查看次数

如何在Perl中的两个行分隔符之间提取行?

我有一个ASCII日志文件,其中包含一些我想要提取的内容.我从来没有花时间适当地学习Perl,但我认为这是完成这项任务的好工具.

该文件的结构如下:

... 
... some garbage 
... 
... garbage START
what i want is 
on different
lines 
END 
... 
... more garbage ...
next one START 
more stuff I want, again
spread 
through 
multiple lines 
END 
...
more garbage

所以,我正在寻找一种方法来提取每个STARTEND分隔符字符串之间的行.我怎样才能做到这一点?

到目前为止,我只找到了一些关于如何使用START字符串打印行的示例,或者其他与我正在寻找的内容有些相关的文档项.

string perl extract delimiter

11
推荐指数
2
解决办法
4万
查看次数

在AWK中的一行中合并多个标志之间的行

示例文件:

Pattern 1

AAAAAAAAAA
BBBBBBBBBB

Pattern 2
Run Code Online (Sandbox Code Playgroud)

我想在一行中打印文件中两个模式之间的行。来自上一个问题如何在两个模式之间打印线,包含或不包含(在 sed、AWK 或 Perl 中)?我发现非常好

awk '/Pattern 1/{flag=1; next} /Pattern 2/{flag=0} flag' file
Run Code Online (Sandbox Code Playgroud)

有输出:

AAAAAAAAAA
BBBBBBBBBB
Run Code Online (Sandbox Code Playgroud)

我想要的输出:

AAAAAAAAAABBBBBBBBBB
Run Code Online (Sandbox Code Playgroud)

awk

11
推荐指数
4
解决办法
200
查看次数

Bash - 在第一次调用后在脚本中编写函数定义(作为GOTO /跳转问题)

我基本上想给我写一个bash脚本,在那里我使用heredoc生成几个大文件; 然后使用这些文件运行一些命令.

据了解,(显然)heredoc文件需要在命令运行之前生成 - 但是,在这种安排中令我恼火的是,编写命令代码之前,我还必须编写'heredoc'语句代码.

所以我以为我会在一个函数中编写heredoc语句 - 但这里仍然存在同样的问题:第24章.函数说:

函数定义必须在第一次调用之前.没有"声明"该功能的方法,例如,在C中.

的确如此:

$ cat > test.sh <<EOF
testo

function testo {
  echo "a"
}
EOF

$ bash test.sh 
test.sh: line 1: testo: command not found
Run Code Online (Sandbox Code Playgroud)

然后我想也许我可以放置一些标签并跳转GOTO,如(伪代码):

$ cat > test.sh <<EOF
goto :FUNCLABEL

:MAIN
testo

goto :EXIT

:FUNCLABEL
function testo {
  echo "a"
}
goto MAIN

:EXIT
Run Code Online (Sandbox Code Playgroud)

...但事实证明BASH goto也不存在.

我唯一的目标是 - 我想首先编写脚本文件的"核心",这是一些五六个命令; 只有然后写在脚本文件中的定界符语句(可能有数百行); 首先拥有heredocs真的让我难以阅读代码.有没有办法实现这一目标?

bash goto function

8
推荐指数
1
解决办法
1万
查看次数

从文件中提取两个模式之间的线条

我需要从一个巨大的文件中提取两个匹配模式之间的特定行.

假设pattern1(在文件中唯一)匹配特定的line # npattern2 (在文件中不唯一)匹配之后的line # m下一个立即匹配line # n.然后我想提取之间和之间的所有行line #n to #m

示例文件内容

***************************************************************************
text line # n-2
text line # n-1
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
text line # m+1
text line # m+2
***************************************************************************
Run Code Online (Sandbox Code Playgroud)

期望的输出

********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
Run Code Online (Sandbox Code Playgroud)

如果你能帮我解决这个问题,我们将不胜感激

linux awk grep sed

8
推荐指数
2
解决办法
2万
查看次数

可以漂亮地打印Awk的代码吗?

我经常发现自己写的Awk单行代码随着时间的流逝变得越来越复杂。

我知道我总是可以创建一个Awk文件来继续添加用例,但是它肯定不如在命令行上更改文本有用。

为此:有什么方法可以漂亮地打印Awk的代码,从而使我更有意义?

例如,鉴于此:

awk 'flag{ if (/PAT2/){printf "%s", buf; flag=0; buf=""} else buf = buf $0 ORS}; /PAT1/{flag=1}' file
Run Code Online (Sandbox Code Playgroud)

如何获得更具可读性的内容?

awk gnu pretty-print

7
推荐指数
1
解决办法
127
查看次数

解析变更日志并提取版本的变更

我在 Markdown 中有一个更改日志文件,其中包含我的应用程序的每个版本之间的所有更改,如下所示:

## Version 1.0.6

* first change
* second change
* third change

## Version 1.0.5

* first foo change
* second foo change

## Version 1.0.4

* and so on...
Run Code Online (Sandbox Code Playgroud)

我想要的是在脚本中提取版本的更改内容。例如,我会提取版本 1.0.5的更改,因此它应该打印:

* first foo change
* second foo change
Run Code Online (Sandbox Code Playgroud)

理想的方法是./getVersionChanges version filename这两个参数:

version :提取更改的版本

filename : 要解析的文件名

我怎样才能用 sed、awk、grep 或其他什么来实现这一点?

bash shell awk sed sh

6
推荐指数
1
解决办法
1531
查看次数

正则表达式:使用 sed 在多行中提取两个字符串之间的内容

我想在 UNIX 中使用sed提取两个字符串之间的内容。我知道sed仅适用于一行,但就我而言,我想提取跨多行的内容。

为了让您了解情况,这里有一个字符串变量,其中包含我想要提取的行和我想要忽略的行:

VAR="Unrelevant
Unrelevant
Title1
Relevant
Relevant
Title2
Unrelevant"
Run Code Online (Sandbox Code Playgroud)

现在我想提取“Title1”和“Title2”之间的部分(包括“Title1”)并将内容保存到名为“RELEVANT”的变量中。在该变量上使用echo应该给我这个所需的输出:

Title1
Relevant
Relevant
Run Code Online (Sandbox Code Playgroud)

我的尝试是:

RELEVANT=(echo "$VAR" | sed -e 's/.*Title1\(.*\)Title2.*/\1/g'))
Run Code Online (Sandbox Code Playgroud)

但这仅在 VAR 是一句俏皮话时才部分起作用:

VAR="Unrelevant Unrelevant Title1 Relevant Relevant Title2 Unrelevant"
Run Code Online (Sandbox Code Playgroud)

“部分”,因为输出是:

 Relevant Relevant
Run Code Online (Sandbox Code Playgroud)

...第一个“Relevant”之前有一个空格,该空格不应该存在并且没有前面的“Title1”。

好吧,除此之外,如果 VAR 跨越多条线,我就无法正常工作。所以我的问题是:如何让它适用于拉伸多行的字符串?

regex unix shell sed extract

6
推荐指数
1
解决办法
5242
查看次数