UNIX shell:如何找到可搜索的表达式?

发布于 2024-09-24 10:52:16 字数 464 浏览 5 评论 0原文

git status 的结尾如下所示:

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Classes/Default.png
#       Classes/[email protected]
...

由于您可能有任意数量的未跟踪文件,因此我尝试从文件末尾尾部到“未跟踪文件”并将其保存到临时文件中,删除前三行并将文件名转换为 git add Classes/...

我似乎找不到一个好的方法(除了可能是不同的语言)来跟踪可搜索的表达式。谢谢!

The end of git status looks like this:

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Classes/Default.png
#       Classes/[email protected]
...

Since you might have any number of untracked files, I'm trying to tail from the end of the file to "Untracked files" and save it to a temp file, strip out the first three lines and convert the filenames to git add Classes/...

I can't seem to find a good way (other than maybe a different language) to tail up to a searchable expression. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

冷夜 2024-10-01 10:52:16

使用 sed 打印从“Untracked files”到末尾的所有内容:

git status | sed -n '/Untracked files:$/,$p'

然后您只需通过删除 # 字符来解析文件名。

您还可以使用 git status -s 获得更短、更容易解析的输出:

~$ git status -s
?? Classes/Default.png
?? Classes/[email protected]

这是 awk 的一个很好的应用,它可以让您同时进行 grep 和提取:

~$ git status -s | awk '/\?\?/{print $2}'
Classes/Default.png
Classes/[email protected]

或者: awk '{if ($1 == "??") print $2}'

当然,您也可以使用 git add 来列出(并添加)未跟踪的文件。

Use sed to print everything from "Untracked files" to the end:

git status | sed -n '/Untracked files:$/,$p'

Then you just have to parse the filenames by removing the # character.

You can also use git status -s to get a shorter, more easily parsed output:

~$ git status -s
?? Classes/Default.png
?? Classes/[email protected]

This is a good application of awk, which lets you grep and extract at the same time:

~$ git status -s | awk '/\?\?/{print $2}'
Classes/Default.png
Classes/[email protected]

Alternatively: awk '{if ($1 == "??") print $2}'

You can also, of course, use git add to list (and add) untracked files.

时光倒影 2024-10-01 10:52:16

使用 tail 命令:

tail -$(($(wc -l < file.txt) - $(grep -n "Untracked files" file.txt|cut -d: -f1) - 2)) file.txt

它是如何工作的:
文件中的总行数 = wc -l <文件.txt
“Untracked files”的行号 = grep -n "Untracked files" file.txt|cut -d: -f1
-2 是删除顶行

使用 git add 完成命令:

tail -$(($(wc -l < file.txt) - $(grep -n "Untracked files" file.txt|cut -d: -f1) - 2)) file.txt | tr -d '#'| while read line; do echo git add $line; done

Use the tail command:

tail -$(($(wc -l < file.txt) - $(grep -n "Untracked files" file.txt|cut -d: -f1) - 2)) file.txt

How it works:
total number of lines in file = wc -l < file.txt
line number of "Untracked files" = grep -n "Untracked files" file.txt|cut -d: -f1
The -2 is to remove the top lines

Complete command with git add:

tail -$(($(wc -l < file.txt) - $(grep -n "Untracked files" file.txt|cut -d: -f1) - 2)) file.txt | tr -d '#'| while read line; do echo git add $line; done
找个人就嫁了吧 2024-10-01 10:52:16

通过管道将其传输到:

perl -e 'my ($o, $p) = (0, shift); while(<>){print if $o or $o = /$p/}' "$MY_REGEX"

其中 $MY_REGEX 是您的模式。就您而言,可能是 '^\s{7}'

Pipe it to:

perl -e 'my ($o, $p) = (0, shift); while(<>){print if $o or $o = /$p/}' "$MY_REGEX"

Where $MY_REGEX is your pattern. In your case, probably '^\s{7}'.

伴梦长久 2024-10-01 10:52:16

使用 shell 脚本的解决方案。

首先开始在 while 循环中读取文件,记录读取的行数,找到所需行时中断循环。
使用行数尾部文件,然后使用 awk 提取文件名。

i=0; 
l=`wc -l filename | awk '{print $1}'`; 

while read line; 
do i=`echo $i + 1 | bc`; 
if [[ $line == "# Untracked files:" ]]; 
then break; 
fi; 
done < "filename"; 

tail -`echo $l -$i -2 | bc` filename | awk -F "/" '{print $NF}'

这里的“filename”是你要处理的文件

Solution using shell scripting.

First start reading the file in a while loop, keep a count of the number of lines read, break the loop when the required line is found.
Using the count of lines tail the file and then extract file names using awk.

i=0; 
l=`wc -l filename | awk '{print $1}'`; 

while read line; 
do i=`echo $i + 1 | bc`; 
if [[ $line == "# Untracked files:" ]]; 
then break; 
fi; 
done < "filename"; 

tail -`echo $l -$i -2 | bc` filename | awk -F "/" '{print $NF}'

Here "filename" is the file you want to process

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文