标签: bash

有没有办法告诉sed忽略符号链接?

我有一个目录A,其中包含一些.xml扩展名的文件,我需要在其上运行搜索和替换.在A中有几个符号链接(也带有.xml扩展名)链接到A中的某些文件.我尝试运行sed -i 's/search_regexp/replacement_string/' *.xml但是当它遇到符号链接时它失败了

 sed: ck_follow_symlink: couldn't lstat file.xml: No such file or directory
Run Code Online (Sandbox Code Playgroud)

一个解决方案是循环我实际想要修改的文件并在每个文件上调用sed,但有没有办法告诉sed忽略符号链接?或者只是按照它们修改链接文件?

unix linux bash shell command-line

5
推荐指数
1
解决办法
1548
查看次数

bash中不区分大小写的字符串比较

以下行删除变量前的前导文本 $PRECEDING

temp2=${content#$PRECEDING}
Run Code Online (Sandbox Code Playgroud)

但现在我希望它$PRECEDING不区分大小写.这适用sedI标志.但我无法弄清楚整个cmd.

bash string-comparison

5
推荐指数
2
解决办法
7081
查看次数

grep与负面模式

我正在寻找一种方法来为具有负模式的特定模式grep文件.我有一个日志文件巫婆报告单位版本,我想看看是否有一个单位巫婆报告版本,然后26.

我能得到的最接近的是:

cat my.log | grep -i -e"version = 0x [^ 2] [^ 6]"

上面的返回行包含"version = 0x13"但不返回包含"version = 0x23"的行

有没有办法告诉grep这样做?

谢谢.

linux bash grep design-patterns

5
推荐指数
2
解决办法
1829
查看次数

rm无法删除以 - 开头的文件

我有一个创建文件的脚本,有时他们最初有2个破折号,有没有办法删除它们mv不起作用

这是我得到的错误

$ ls
 --1355509766.jpg

$ rm --1355509766.jpg 
rm: illegal option -- -
usage: rm [-f | -i] [-dPRrvW] file ...
   unlink file

$ rm "--1355509766.jpg"
rm: illegal option -- -
usage: rm [-f | -i] [-dPRrvW] file ...
   unlink file
Run Code Online (Sandbox Code Playgroud)

linux bash shell rm

5
推荐指数
3
解决办法
4921
查看次数

在Bash中,我怎么知道我目前是否在终端

我想创建自己的个人日志文件,不仅可以在我登录和退出时记录,还可以在我锁定/解锁屏幕时记录.有点类似/ var/log/wtmp类固醇.

为此,我决定在登录到后台运行的Ubuntu时运行脚本,直到我退出.我这样做的计划是将脚本添加到脚本中.bashrc,./startlogging.sh &并使用脚本trap来捕获信号.这很好,除了.bashrc每次打开一个新终端时运行,这不是我想要的记录器.

有没有办法告诉Bash当前登录是gnome登录?或者,有什么.gnomerc我可以用来运行我的脚本?

编辑:这是我的脚本:

编辑2:删除了脚本,因为它与问题无关.我将重新提出我的另一个问题,而不是重新利用这个问题.

bash gnome

5
推荐指数
1
解决办法
276
查看次数

找到一个特定的文件然后管道到stdout/awk

我正在寻找一种递归遍历目录以查找特定文件的方法,然后停止搜索并将文件名路径传递给awk函数或类似的东西.我之前问了一个类似的问题,但是在我以外的机器上进行测试后发现locate命令不起作用,因为不是每个人都在他们的系统上使用它.

我与locate一起使用的代码:

dir="/path/to/destination/";
mkdir "$dir";
locate -l 1 target_file.txt | \
   awk -v dir="$dir" '{printf "cp \"%s\" \"%s\"\n", $1, dir}' | \
   sh
Run Code Online (Sandbox Code Playgroud)

bash stdout find

5
推荐指数
1
解决办法
274
查看次数

从 bash 中的正则表达式捕获组

我有以下字符串/path/to/my-jar-1.0.jar,我正在尝试为其编写 bash 正则表达式以提取my-jar.

现在我相信以下正则表达式会起作用:([^\/]*?)-\d但我不知道如何让 bash 运行它。

以下:echo '/path/to/my-jar-1.0.jar' | grep -Po '([^\/]*?)-\d'捕获my-jar-1

regex bash

5
推荐指数
1
解决办法
7508
查看次数

回归:导出的 Bash 函数经过另一个过程后丢失

从 Ubuntu 14.04 迁移到 16.04 时,我注意到我的几个 Bash 脚本由于缺少导出的函数而失败。我想知道这是否与Shellshock 错误的修复有关,即使我只是简单export -f的函数,而不是依赖 Bash 内部函数表示。失败不会发生在直接的 Bash 子 shell 中,只有在两者之间有另一个进程时才会发生。例如,Bash 调用 awk / Perl / Vim 调用另一个 Bash。下面是一个 Perl 的例子:

好的

$ foo() { echo "foobar"; }
$ export -f foo
$ export -f; foo
foo ()
{
    echo "foobar"
}
declare -fx foo
foobar
$ bash -c "export -f; foo"
foo ()
{
    echo "foobar"
}
declare -fx foo
foobar
$ perl -e 'system("bash -c \"export -f; foo\"")'
foo …
Run Code Online (Sandbox Code Playgroud)

bash shellshock-bash-bug dash-shell

5
推荐指数
1
解决办法
311
查看次数

如何为适用于 Linux 的 Windows 子系统转换 Windows 路径

我正在寻找一种将 Win32 路径转换为 ​​POSIX 路径的方法,最好使用 Win32 工具。

背景

最新的 Windows 10 Insider Build 引入了适用于 Linux 的 Windows 子系统 (WSL),包括bash由 Ubuntu 背后的公司 Canonical 提供的本机。他们的实现在 Windows 上的 Ubuntu 上bash使用了相当复杂的Bash名称,我将bash.exe在下文中引用它。

访问Windows路径的等效C:\Users\me\Desktopbash.exeIS /mnt/c/Users/me/Desktop

我正在尝试bash.exe从 Windows 命令提示符(例如bash -c ls /mnt/me/Desktop)传递路径。由于这需要我传递 POSIX 路径,我想知道 Microsoft 是否提供任何工具以编程方式将 Win32 路径转换为 ​​POSIX 路径(就像cygpath在 Cygwin 中所做的那样。)

除非 Windows 附带任何翻译工具,否则我对确定路径的替代方法持开放态度,例如使用 Node 或 Python。

python bash node.js windows-10 windows-subsystem-for-linux

5
推荐指数
1
解决办法
2008
查看次数

检查进程是否正在运行,如果它已经在运行则退出

我有一个带有方法的shell脚本:

start(){
echo "Hello world"
}

stop(){
ps -ef|grep script.sh|grep -v grep|xargs kill
}

while [ "$1" != "" ]; do
case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        *)
            echo $"Usage: $0 {start|stop}"
            exit 1
        esac
   shift
done
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令运行此脚本:./script.sh start调用 start 方法。现在,我想检查此进程是否已在运行,如果已在运行则退出。我在网上尝试了一些解决方案,但没有任何效果。有人请帮忙。我尝试过的解决方案是:

if [ -f /var/tmp/script.lock ]; then
  echo "Already running. Exiting."
  exit 1
else
  touch /var/tmp/script.lock
fi
<main script code>
#some code
rm /var/tmp/script.lock
Run Code Online (Sandbox Code Playgroud)

另一种是:

PID=$(ps -ef | grep script.sh|grep -v grep)

   if [ -z …
Run Code Online (Sandbox Code Playgroud)

bash shell scripting scripting-language

5
推荐指数
1
解决办法
4940
查看次数