使用多个分隔符打印

时间:2018-04-24 17:48:58

标签: linux bash

我正在使用这个脚本

    #!/bin/bash

    echo Su direccion IP es: 
    /sbin/ifconfig | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'

输出我所有IP地址的列表 但是id喜欢在每个地址之前添加相应的名称

例如

eth0:adresss1

tun0:address2

任何建议?我要感谢一些解释 如果可能,我还想过滤掉lo连接?谢谢

4 个答案:

答案 0 :(得分:0)

ip -o addr list | awk -F'[[:space:]/]+' '$3 == "inet" && $2 != "lo" { print $2 ": " $4 }'

答案 1 :(得分:0)

import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import org.apache.poi.hssf.model.InternalSheet; import org.apache.poi.hssf.record.SelectionRecord; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellRangeAddress8Bit; import org.apache.poi.ss.util.CellAddress; public class ExcelGeneratorDemo { public static void main(String[] args) throws IOException { writeExcelFile("D21"); } private static void writeExcelFile(String activeCell) throws IOException { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); CellAddress address = new CellAddress(activeCell); setActiveCell(sheet, address); wb.write(new File(activeCell + ".xls")); } /** * Calling just {@code sheet.setActiveCell} has no effect when opening * the file with Microsoft Excel 2016. */ private static void setActiveCell(HSSFSheet sheet, CellAddress address) { sheet.setActiveCell(address); // Following three private fields in a row cannot be the correct path. InternalSheet internalSheet = getField(sheet, "_sheet"); SelectionRecord selection = getField(internalSheet, "_selection"); CellRangeAddress8Bit[] ranges = getField(selection, "field_6_refs"); ranges[0].setFirstColumn(address.getColumn()); ranges[0].setLastColumn(address.getColumn()); ranges[0].setFirstRow(address.getRow()); ranges[0].setLastRow(address.getRow()); } private static <T> T getField(Object obj, String fieldName) { try { Field field = obj.getClass().getDeclaredField(fieldName); field.setAccessible(true); return (T) field.get(obj); } catch (ReflectiveOperationException e) { throw new IllegalStateException(e); } } }

答案 2 :(得分:0)

另一个awk

ifconfig | awk -v OFS=": " -v RS= '$1!="lo" && split($0, a, /inet addr:/) > 1{
sub(/ .*/, "", a[2]); print $1, a[2]}'

eth0: 192.168.0.101
tun0: 10.1.111.123

答案 3 :(得分:0)

我认为我对此的看法是:

$ ip addr |
  awk '/^[0-9]+:/{print ""} 1' | 
  awk -vRS= '{for(i=1;i<NF;i++)if($i~/^inet/)print $2,$(i+1)}'

这使用了两个awk实例:第一个通过添加空行来分割记录,第二个用于逐步搜索地址搜索。

此管道的输出将包含每个IP地址一行(包括IPv6)。

请注意,在ifconfig表示法中,接口上的第二个IP地址可能会显示为“子接口”,如eth0:0。这种表示法仅与ifconfig结合使用,正如您在评论中看到的那样,这不是处理现代句子的推荐方法。