小编Ini*_*ian的帖子

sed 在 bash 中使用变量取消注释多行

我遇到以下问题:我试图取消注释我确定使用的特定行:

LINESTART=$(grep -nr "matching string" test.conf | cut -d : -f1)
Run Code Online (Sandbox Code Playgroud)

之后我需要取消注释该代码$LINESTART部分$((LINE+10))

LINEEND=$((LINE+10))
Run Code Online (Sandbox Code Playgroud)

我尝试了以下 sed 语法:

sed -i '${LINESTART},${LINEEND} s/# *//' test.conf
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

sed: -e expression #1, char 4: extra characters after command
Run Code Online (Sandbox Code Playgroud)

示例 test.conf:

 84     #server {
 85     #    listen       8000;
 86     #    listen       somename:8080;
 87     #    server_name  somename  alias  another.alias;
 88 
 89     #    location / {
 90     #        root   html;
 91     #        index  index.php index.html index.htm;
 92     #    }
 93     #}
Run Code Online (Sandbox Code Playgroud)

unix linux awk

4
推荐指数
1
解决办法
2169
查看次数

警告:无法使用参数启动程序。警告:Exec 格式错误

您好,我正在尝试在 opensuse 中创建一个 Shell 脚本来创建 MySqlUsers,但是当我尝试运行它时,出现此错误:

警告:无法使用参数“/home/thomas/Scripts/MySqlCreateUser.sh”启动程序“/home/thomas/Scripts/MySqlCreateUser.sh”。

警告:Exec 格式错误

知道我能做什么吗?

linux bash shell sh opensuse

4
推荐指数
1
解决办法
3758
查看次数

如何在 bash 脚本中与进度在同一行中打印

我想按以下方式打印文本

Waiting for completion.
Waiting for completion..
Waiting for completion...
Run Code Online (Sandbox Code Playgroud)

[注:不超过三个点]

上面应该在同一行并且在一个循环中。

当循环条件为假时,我也想在同一行中得到以下内容:

Waiting for completion... [OK]
Run Code Online (Sandbox Code Playgroud)

我如何在 bash 脚本中实现这一目标?

bash

4
推荐指数
1
解决办法
3172
查看次数

如何在 awk 中使用环境变量

我有以下AWK脚本用于更新settings.py. 我在 Docker 安装期间使用,我正在尝试传递 ENV 变量。

要传递的 ENV 变量:

DB_USER,
DB_PASS,
DB_NAME
Run Code Online (Sandbox Code Playgroud)

下面的代码

awk 'function pr(sp, k, v){    # prints key-value pair with indentation
         printf "%s\047%s\047: \047%s\047,\n",sp,k,v; 
     }
     /sqlite/{ sub(/sqlite[0-9]*/,"mysql",$0) }
     /NAME/{ sp=substr($0,1,index($0,"\047")-1); 
             print sp$1" \047$DB_NAME\047"; 
             pr(sp,"USER","$DB_USER"); pr(sp,"PASSWORD","$DB_PASS"); 
             pr(sp,"HOST","localhost"); pr(sp,"PORT",""); next 
     }1'
Run Code Online (Sandbox Code Playgroud)

awk

4
推荐指数
1
解决办法
3304
查看次数

如何使用bash组合两个文本文件

我有两个文本文件,我希望在bash中组合,以便一个文件中的每一行与另一个文件中的每个文件组合.

FILE1.TXT

abc123
def346
ghj098
Run Code Online (Sandbox Code Playgroud)

FILE2.TXT

PSYC1001
PSYC1002
PSYC1003
Run Code Online (Sandbox Code Playgroud)

我希望将它们组合起来,以便将第1行file1添加到每一行file2,并|在它们之间使用管道去限制器.

例如

PSYC1001|abc123
PSYC1002|abc123
PSYC1003|abc123
Run Code Online (Sandbox Code Playgroud)

然后对于file1中的其他行也一样,所以我最终会得到

PSYC1001|abc123
PSYC1002|abc123
PSYC1003|abc123
PSYC1001|def346
PSYC1002|def346
PSYC1003|def346
PSYC1001|ghj098
PSYC1002|ghj098
PSYC1003|ghj098<
Run Code Online (Sandbox Code Playgroud)

我一直在bash通过复制本网站的示例来做类似的简单文本,但我没有找到一个可以做到这一点的例子.很想听听你的建议.我知道它一定很简单,但我还没有解决.

bash

4
推荐指数
1
解决办法
57
查看次数

Bash表达式列出以模式开头和结尾的文件

在我的shell bash中,我必须选择以ab或开头的文件xyz,而不是以.jpg或结尾.gif

这是我做的,但它不起作用:

$ echo ab*[!.jpg] ab*[!.gif] xyz*[!.jpg] xyz*[!.gif]

bash shell

4
推荐指数
1
解决办法
109
查看次数

如何在 docker 容器中运行 /bin/bash?

如何/bin/bash在以 启动的 docker 容器中运行-d option,例如:

sudo docker run -P --name test-cnt3 -d base-tst:0.1? 
Run Code Online (Sandbox Code Playgroud)

我真的需要容器中的控制台,并且我已经对运行它感到绝望

bash exec bin docker

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

通过emplace()将对象指针插入到地图的地图中不起作用

我正在尝试将指针对象插入到map通过emplace()但它不起作用.

我在下面创建了一个简单的问题表示.我正在尝试插入newFooList指针对象类型Foo*.

我似乎找不到为FooMap*in 创建类型的方法std::map<int, FooMap*> m_fooMapList.是否应该使用new地图的第二个字段?

#include <iostream>
#include <utility>
#include <stdint.h>
#include <cstdlib>
#include <map>

class Foo
{
    private:
        int m_foobar;
    public:
        Foo(int value)
        {
            m_foobar = value;
        }
        void setfoobar(int value);
        int getfoobar();
};

class FooMap
{
    private:
        std::map<int, Foo*> m_newFoo;

    public:
        FooMap() = default;
};

class FooMapList
{
    private:
        std::map<int, FooMap*> m_fooMapList;
    public:
        FooMapList() = default;
        void insertFoo(Foo* newFooObj);
};

int Foo::getfoobar(void)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ pointers stdmap c++11 emplace

4
推荐指数
1
解决办法
505
查看次数

在特定索引处添加分隔符

我想在文件的每一行的某些索引中添加分隔符.

我有一个包含数据的文件:

10100100010000
20200200020000
Run Code Online (Sandbox Code Playgroud)

我知道每列的偏移量(2,5和9)

使用此sed命令: sed 's/\(.\{2\}\)/&,/;s/\(.\{6\}\)/&,/;s/\(.\{11\}\)/&,/' myFile

我得到了预期的输出:

10,100,1000,10000 
20,200,2000,20000
Run Code Online (Sandbox Code Playgroud)

但是有大量的列(~200)和行(300k)真的很慢.

有没有有效的替代方案?

regex awk sed

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

POSIX 与非 POSIX 模式下的 Bash 赋值语句扩展

GNU bash的手册有以下通道一边谈论外壳参数:

command内建不会阻止采取赋值语句从他们扩大为赋值语句的参数建宏; 当不在 POSIX 模式下时,赋值内置函数在命令前面时会丢失它们的赋值语句扩展属性。

由于这个原因,我无法弄清楚它在说什么,并且我也无法设法编写一个命令,该命令在常规模式和 posix 模式之间的赋值表达式的行为上有所不同。

谁能找到这种差异的例子?

bash

4
推荐指数
1
解决办法
128
查看次数

标签 统计

bash ×6

awk ×3

linux ×2

shell ×2

bin ×1

c++ ×1

c++11 ×1

docker ×1

emplace ×1

exec ×1

opensuse ×1

pointers ×1

regex ×1

sed ×1

sh ×1

stdmap ×1

unix ×1