Answers:
您可以通过以下方式使用awk
的字段分隔符(-F
):
$ cat file
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
$ cat file | awk -F '\\.com' '{print $1".com"}'
google.com
unix.stackexchange.com
isuckatunix.com
说明:
NAME
awk - pattern scanning and processing language
-F fs
--field-separator fs
Use fs for the input field separator (the value of the FS predefined variable).
当您要删除之后的所有内容时.com
,请-F '.com'
与分隔行.com
并print $1
仅输出之前的部分.com
。因此,$1".com"
添加.com
并为您提供预期的输出。
/
FS那样抢占先机呢?
acomercial.com/asdsad
用于非交互式就地文件编辑的最佳工具是ex
。
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
如果您曾经使用过vi
并且曾经键入过以冒号开头的命令,:
那么您将使用ex命令。当然,您可以通过这种方式执行的许多更高级或“特别”的命令都是Vim扩展(例如:bufdo
),并且未在POSIX规范中ex
定义,但是这些规范在非可视化中提供了真正惊人的功能和灵活性。文本编辑(交互式或自动)。
上面的命令包含几个部分。
-s
启用静音模式以准备ex
批量使用。(禁止输出消息等。)
-c
指定一旦file.txt
在缓冲区中打开文件(在本例中为)后执行的命令。
%
是一个等效于地址的地址说明符1,$
—表示将以下命令应用于缓冲区的所有行。
s
是您可能已经熟悉的替代命令。尽管某些高级正则表达式功能可能因实现方式而有所不同,但它通常用于命令中,vi
并具有与s
命令sed
基本相同的功能。在这种情况下,从“ .com”到行尾的内容将仅替换为“ .com”。
竖线分隔要执行的顺序命令。在许多(大多数)ex
实现中,您还可以使用其他-c
选项,例如:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
但是,POSIX不需要这样做。
将x
任何更改写入文件后,该命令将退出。与wq
表示“写入并退出”的含义不同,x
仅当缓冲区已被编辑时才写入文件。因此,如果您的文件未更改,则将保留时间戳。
sed
的伪造-i多。它读取/写入磁盘缓冲区。亲自查看w / ex -r
和preserve
命令。
preserve
命令是什么?
非常快速,简单且肮脏的python方式:
#!/usr/bin/env python
import sys
with open( sys.argv[1] ) as file:
for line in file:
print line.split("/")[0]
样品运行
skolodya@ubuntu:$ chmod +x removeStrings.py
skolodya@ubuntu:$ ./removeStrings.py strings.txt
google.com
unix.stackexchange.com
isuckatunix.com
skolodya@ubuntu:$ cat strings.txt
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
.com
,它只是删除从/
该行的第一个开始的所有内容。(在我看来,这是更好的方法!)
.net
,则在其他方法中,域名和扩展名后的部分不会被删除,因此/
用作分隔符会更安全。
.com
而不是删除第一个/
字符之后(包括第一个字符)的所有内容?如果您en.wikipedia.org/wiki/Ubuntu
的列表中有类似URL的网址怎么办?